【问题标题】:Extracting values from nested JSON in MySQL从 MySQL 中的嵌套 JSON 中提取值
【发布时间】:2021-09-03 10:20:04
【问题描述】:

我想从 MySQL 中的嵌套 JSON 中提取数据,例如:

create table json_test (my_json json);
insert into json_test values ('{"outer_key": {"inner_key": "inner_value"} }');
mysql> select * from json_test;
+---------------------------------------------+
| my_json                                     |
+---------------------------------------------+
| {"outer_key": {"inner_key": "inner_value"}} |
+---------------------------------------------+

我可以成功提取一层深层:

select my_json -> '$.outer_key' from json_test;

但我无法从我熟悉的 Postgres 中获得最深刻的价值:

select my_json -> '$.outer_key' -> '$.inner_key' from json_test; -- syntax error
select my_json -> '$.outer_key' ->> '$.inner_key' from json_test; -- syntax error

我想出了一个丑陋的解决方法:

mysql> with cte as (select my_json -> '$.outer_key' as cte_inner from json_test) select cte_inner -> '$.inner_key' from cte;
+----------------------------+
| cte_inner -> '$.inner_key' |
+----------------------------+
| "inner_value"              |
+----------------------------+

但想知道是否有更简单的解决方案?

【问题讨论】:

    标签: mysql json


    【解决方案1】:

    您可以像这样指定full path

    select my_json->'$.outer_key.inner_key' from json_test;
    -- "inner_value" (json)
    
    select my_json->>'$.outer_key.inner_key' from json_test;
    -- inner_value (string)
    

    【讨论】:

    • -- "inner_value" (json) 看来这不是 JSON 而是字符串类型的值。请参阅fiddle - JSON 被视为二进制字符串(由客户端检测到),因此以十六进制打印而不是提取值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2021-08-26
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    相关资源
    最近更新 更多