首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在json列中通过带有双引号和反斜杠的键提取值

在json列中通过带有双引号和反斜杠的键提取值
EN

Stack Overflow用户
提问于 2021-05-07 07:23:00
回答 1查看 113关注 0票数 1

我有一个表,其中包含这样的数据

代码语言:javascript
复制
| 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"返回一个空值列表,这清楚地表明查询没有命中正确的键。

代码语言:javascript
复制
| 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.

关于如何查询带有双引号和反斜杠等特殊字符的键,有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-07 07:44:29

下面是一个测试:

代码语言:javascript
复制
mysql> select json_extract(cast('{"simple": "val1", "h\\"simple": "val2"}' as json),
    '$."h\\"simple"') as h_simple;
+----------+
| h_simple |
+----------+
| "val2"   |
+----------+

在JSON路径表达式中需要一个文字\,这样它就可以将"转义为JSON。但是MySQL字符串将反斜杠视为特殊字符,因此必须使用双反斜杠来确保单个文字反斜杠能够通过MySQL的字符串文字解析器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67427140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档