mysql要对这样的json字段取数,取出来因为shine对应value有两个双引号,导致值为空值,并且干扰了后面的submitTime,导致其value也为空值,这个json字段数据比较大,要如何正确取数呀
{pfAutoFinishStatus":"","shine":""挺好"","submitTime":"2023-04-05"}
INSERT INTO rule (id, rule_key, rule_value) VALUES (4, 'address', '{"province": {"city": "北京市"}}');
INSERT INTO rule (id, rule_key, rule_value) VALUES (4, 'user', '{"info": {"id_no": "2313156151111"}}');
案例一:查询城市是北京市的数据
select * from rule where rule_key = 'address' and json_extract(rule_value,'$.province.city')='北京市';
解决方案:
SQL SELECT JSON_EXTRACT(json_column, '$.key') FROM table_name;
其中,json_column指的是JSON类型的字段名,key指的是你要提取的键名,table_name指的是你的数据表名称。
SQL SELECT JSON_EXTRACT(json_column, '$.\\"key\\"') FROM table_name;
在这个查询语句中,键名"key"被用双引号包围,并且双引号前面加上了转义符\,双引号本身也需要被转义,所以需要使用\"。
SQL SELECT JSON_EXTRACT(json_column, '$."key1"', '$."key2"') FROM table_name;
在这个查询语句中,使用了多个参数来指定要提取的键名,每个参数中的键名都需要用双引号包围。
SQL ALTER TABLE table_name ADD INDEX json_key1_idx (JSON_EXTRACT(json_column, '$."key1"'));
在这个语句中,使用了JSON_EXTRACT函数来提取"key1"的值,并将提取出来的值建立索引,从而可以快速查询"key1"的值。
这样试试
SELECT JSON_EXTRACT('{"pfAutoFinishStatus":"","shine":""挺好"","submitTime":"2023-04-05"}', '$.shine')
select JSON_UNQUOTE(JSON_EXTRACT('{ "pfAutoFinishStatus": "", "shine": "\\"挺好\\"", "submitTime": "2023-04-05" }', '$.shine')) as JSON_VALUE