Mysql 在json列中使用双引号和反斜杠按键提取值
我有一个表,包括这样的数据Mysql 在json列中使用双引号和反斜杠按键提取值,mysql,mysql-json,Mysql,Mysql Json,我有一个表,包括这样的数据 | id | jdoc | +----+-------------------------------------------+ | 1 | {"simple": "val1", "h\"simple": "val2"} | | 1 | {"simple": "val1"
| id | jdoc |
+----+-------------------------------------------+
| 1 | {"simple": "val1", "h\"simple": "val2"} |
| 1 | {"simple": "val1", "h\"simple": "val2"} |
| 1 | {"simple": "val1", "h\\\"simple": "val2"} |
+----+-------------------------------------------+
jdoc
是json格式的列,我试图通过键获取值
我可以使用键simple
从test2运行查询选择jdoc->“$”simple”来获取值代码>
但类似的查询不适用于检索键“h\”simple“
例如,查询从test2中选择jdoc->“$”h\“simple”代码>返回一个空值列表,这清楚地表明查询没有命中正确的键
| jdoc->'$."h\"simple"' |
+-----------------------------+
| NULL |
| NULL |
| NULL |
+-----------------------------+
此外,我还尝试了基于以下内容的双引号和反斜杠转义查询:
从test2中选择jdoc->'$.“h\\\“simple”;
但它抱怨错误:3143(42000):JSON路径表达式无效。错误位于字符位置13附近。
关于如何查询带有双引号和反斜杠等特殊字符的键,有什么建议吗?下面是一个测试:
mysql> select json_extract(cast('{"simple": "val1", "h\\"simple": "val2"}' as json),
'$."h\\"simple"') as h_simple;
+----------+
| h_simple |
+----------+
| "val2" |
+----------+
在JSON路径表达式中需要一个文本\
,以便将“
转义为JSON。但是MySQL字符串将反斜杠视为特殊的,因此您必须使用双反斜杠来确保单个文本反斜杠通过MySQL的字符串文本解析器。您能详细说明为什么需要双反斜杠吗?如有联系,将不胜感激。因为从中,看起来我只需要一个反斜杠来转义双引号,另一个反斜杠来转义反斜杠,应该是“$。”h\\\*simple“
。该键只包含一个反斜杠和一个双引号{“simple”:“val1”,“h\“simple”:“val2”}
我注意到在发布的示例中,你存储了{“simple”:“val1”,“h\“simple”:“val2”}
,其中包含了双引号?我已经在上面的回答中解释过了。再次阅读你的答案,我想我的困惑是为什么“{“simple”:“val1”,“h\\“simple”:“val2”}
存储为{“simple”:“val1”,“h\”simple:“val2”}
。如果使用双反斜杠,我希望只存储双引号。为了确保MySQL中的单个文本反斜杠,数据库中存储的字符串中必须有单个文本反斜杠,因为这将转义文本双引号。否则,双引号是JSON字符串值的终止。