MySQL 5.7 JSON_EXTRACT 不适用于对象 : [ERROR] "Missing a closing quotation mark in string" 中带引号的字符串

标签 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)

我收到一条错误消息:函数 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/

相关文章:

mysql查询帮助在社交网站上找到共同的 friend

php - PHP中API的响应转换为 float ,需要整数

php - mysqli->multi_query INSERT INTO 无结果

mysql - 未找到列 : 1054 Unknown column '` default `' in ' where clause', 查询为 : SELECT `main_table` . * FROM `fastimporter_attributes`

php - 简单的 MYSQL 查询后无法访问用户的名字

mysql - 高效遍历关系数据库中以表形式存储的图

json - 如何使用编码器/解码器发送/接收 Go Unix Socket JSON 字符串

javascript - 如何将数组传递给java servlet

php - 如何将两个数据库合并到一个数据库中?

php - 无法使用 MSSQL 在 PDO 中引用表名