【问题标题】:How do I search nested json query in mysql?如何在 mysql 中搜索嵌套的 json 查询?
【发布时间】:2019-11-19 06:46:30
【问题描述】:

我正在使用带有原生 JSON 数据类型的 MySQL 5.7+。

样本数据:

set @jsn_string='{\"body\": {\"items\": \"[{\\\"count\\\":530,\\\"id\\\":5},{\\\"count\\\":1,\\\"id\\\":519},{\\\"count\\\":209,\\\"id\\\":522},{\\\"count\\\":0,\\\"id\\\":3004}] \"}}';

问题:正确答案是 530

下面查询有数据的位置

select json_extract(@jsn_string,'$.body.items[0].id[0]');

但结果是:null

【问题讨论】:

    标签: mysql json nested


    【解决方案1】:

    我们可以使用json_unquote 删除items[0] 中的双引号

    set @jsn_string='{\"body\": {\"items\": \"[{\\\"count\\\":530,\\\"id\\\":5},{\\\"count\\\":1,\\\"id\\\":519},{\\\"count\\\":209,\\\"id\\\":522},{\\\"count\\\":0,\\\"id\\\":3004}] \"}}';
    
    
    select json_extract(json_unquote(json_unquote(json_extract(@jsn_string, '$.body.items[0]')))
        ,'$[0].count');
    

    dbfiddle

    【讨论】:

    • 这就是我的意思,我的 json 无效,它与 replace 一起使用效果很好~!
    • 另一个问题~!如何提取迭代的键、值? id[0], count[0] id[1], count[1] ~~~~~~~~~~ id[n], count[n]
    • @Aiden,这应该是单独的问题,如果有5个人回答了这个问题,他们将全部无效。
    • @metal 这是我的新问题。请帮我。 stackoverflow.com/questions/58932899/…
    • @Aiden,对不起,但我不确定您是否接受答案,或者至少为所做的努力投票。
    【解决方案2】:

    根据您的示例 JSON,id 不是数组。所以id[0] 不起作用据我所知,您想检索 530。为此,您可以使用以下内容。

    select json_extract(@jsn_string,'$.body.items[0].count');
    

    如果我理解有误,请告诉我。

    编辑 - 1: 我认为您的 json 无效。数组不应该用大括号括起来。试试这个

    @jsn_string='{\"body\": {\"items\": [{\\\"count\\\":530,\\\"id\\\":5},{\\\"count\\\":1,\\\"id\\\":519},{\\\"count\\\":209,\\\"id\\\":522},{\\\"count\\\":0,\\\"id\\\":3004}]}}';
    

    【讨论】:

    • result 为 null ,无法检索 530 ?
    猜你喜欢
    • 2016-10-09
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2015-02-20
    • 2019-05-05
    • 2021-09-01
    相关资源
    最近更新 更多