我有一个表,其中包含这样的数据
| id | jdoc |
+----+-------------------------------------------+
| 1 | {"simple": "val1", "h\"simple": "val2"} |
| 1 | {"simple": "val1", "h\"simple": "val2"} |
| 1 | {"simple": "val1", "h\\\"simple": "val2"} |
+----+-------------------------------------------+
jdoc
是json格式的列,我正在尝试通过键获取值。
我可以通过运行查询select jdoc->'$."simple"' from test2 ;
来获取键为simple
的值
但是类似的查询不适用于检索键的值例如,查询"h\"simple"
返回一个空值列表,这清楚地表明查询没有命中正确的键。
| jdoc->'$."h\"simple"' |
+-----------------------------+
| NULL |
| NULL |
| NULL |
+-----------------------------+
此外,我还尝试了基于:https://dev.mysql.com/doc/refman/8.0/en/string-literals.html的双引号和反斜杠的转义查询。
select jdoc->'$."h\\\"simple"' from test2 ;
但它抱怨ERROR: 3143 (42000): Invalid JSON path expression. The error is around character position 13.
关于如何查询带有双引号和反斜杠等特殊字符的键,有什么建议吗?
发布于 2021-05-07 07:44:29
下面是一个测试:
mysql> select json_extract(cast('{"simple": "val1", "h\\"simple": "val2"}' as json),
'$."h\\"simple"') as h_simple;
+----------+
| h_simple |
+----------+
| "val2" |
+----------+
在JSON路径表达式中需要一个文字\
,这样它就可以将"
转义为JSON。但是MySQL字符串将反斜杠视为特殊字符,因此必须使用双反斜杠来确保单个文字反斜杠能够通过MySQL的字符串文字解析器。
https://stackoverflow.com/questions/67427140
复制相似问题