MySQL 5.7 JSON_EXTRACT不适用于对象中带引号的字符串:[错误]“字符串中缺少右引号”

时间:2018-08-25 00:35:50

标签: mysql sql json quotes mysql-5.7

我无法使用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)

我收到一条错误消息,指出: 参数1中的无效JSON文本无法实现json_extract:“字符串中缺少右引号。”位于xxx

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

以下是对我有用的修复程序: 我使用运算符“->”代替了JSON_UNQUOTE(JSON_EXTRACT(“ jsonString”)),并且对于输入字符串中的任何类型的引号,它都不会给我带来任何错误。请注意,上面的Sample JSON只是我在输入中期望的用例之一。我大约有400万条记录,具有字符和引号的所有不同组合,因为它包含电子邮件正文,并且使用运算符而不是实际命令可以很好地工作,这很奇怪,因为两者基本相同,但我对它的满意程度始终不减我可以使用一个小的修复程序来解决它。

{
@valid_json := JSON_VALID(inputString),
IF(@valid_json, inputString ->> '$.email', NULL) AS EMAIL,
}