如何在mysql中搜索嵌套的json查询?

时间:2019-11-19 06:46:30

标签: mysql json nested

我正在使用MySQL 5.7+和本机JSON数据类型。

样本数据:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

根据您的示例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}]}}';