我无法在 MySQL 5.7 中使用 JSON_EXTRACT 函数提取带引号的字符串。
示例输入:
{
"email": "d'souza@email.com",
"body": "I may have "random quotes '(single)/(double)" " in my source data"
}
尝试使用,
SELECT
@valid_source := JSON_VALID(jsonString), NULL
IF(@valid_source, JSON_UNQUOTE(JSON_EXTRACT(jsonString, "$.email")), NULL)
我收到一条错误消息:函数 json_extract 的参数 1 中的 JSON 文本无效:“字符串中缺少右引号。”在位置 xxx
任何帮助将不胜感激,谢谢!
最佳答案
这是对我有用的修复: 我使用了 operator "-->"而不是 JSON_UNQUOTE(JSON_EXTRACT("jsonString")) 并且它没有为我的输入字符串中的任何类型的引号抛出任何错误。请注意,上面的示例 JSON 只是我在输入中期望的用例之一。我有大约 400 万条记录,包含所有不同的字符和引号组合,因为它包含电子邮件正文并且使用运算符而不是实际命令工作得很好,这很奇怪,因为两者本质上是相同的,但我很高兴我可以使用一个小修复程序来解决它。
{
@valid_json := JSON_VALID(inputString),
IF(@valid_json, inputString ->> '$.email', NULL) AS EMAIL,
}
关于MySQL 5.7 JSON_EXTRACT 不适用于对象 : [ERROR] "Missing a closing quotation mark in string" 中带引号的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52013149/