mysql的json字段如何正确取数

mysql要对这样的json字段取数,取出来因为shine对应value有两个双引号,导致值为空值,并且干扰了后面的submitTime,导致其value也为空值,这个json字段数据比较大,要如何正确取数呀

{pfAutoFinishStatus":"","shine":""挺好"","submitTime":"2023-04-05"}

  • 这篇博客: mysql json类型查询对象和数组等格式中的 查询复杂嵌套json对象 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 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')='北京市';
  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案:

    1. 使用JSON_EXTRACT函数来提取MySQL中的JSON字段数据。JSON_EXTRACT函数的语法如下:

    SQL SELECT JSON_EXTRACT(json_column, '$.key') FROM table_name;

    其中,json_column指的是JSON类型的字段名,key指的是你要提取的键名,table_name指的是你的数据表名称。

    1. 如果需要提取的键名中包含双引号,可以通过双重转义来解决。例如,如果你要提取的键名是"key",则可以将查询语句修改为:

    SQL SELECT JSON_EXTRACT(json_column, '$.\\"key\\"') FROM table_name;

    在这个查询语句中,键名"key"被用双引号包围,并且双引号前面加上了转义符\,双引号本身也需要被转义,所以需要使用\"。

    1. 如果你需要同时提取多个键名的值,可以使用JSON_EXTRACT函数的多参数形式。例如,如果你要同时提取键名为"key1"和"key2"的值,可以使用以下的查询语句:

    SQL SELECT JSON_EXTRACT(json_column, '$."key1"', '$."key2"') FROM table_name;

    在这个查询语句中,使用了多个参数来指定要提取的键名,每个参数中的键名都需要用双引号包围。

    1. 如果你的JSON字段数据非常大,可能会导致查询速度缓慢。为了提高查询速度,可以考虑将JSON字段中重要的键名提取出来并建立索引。例如,如果你要经常查询的键名为"key1",则可以使用以下语句来创建索引:

    SQL ALTER TABLE table_name ADD INDEX json_key1_idx (JSON_EXTRACT(json_column, '$."key1"'));

    在这个语句中,使用了JSON_EXTRACT函数来提取"key1"的值,并将提取出来的值建立索引,从而可以快速查询"key1"的值。

    1. 如果你仍然无法正确提取JSON字段中的数据,可以考虑使用一些第三方的JSON解析库来处理数据。其中比较流行的库包括jsoncpp和RapidJSON等。使用这些库可以方便地解析JSON数据,同时还可以提供更好的错误处理和调试能力。

这样试试
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