我正在使用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
答案 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}]}}';