json函数在mysql中如何操作

json函数在mysql中如何操作
最新回答
絮雨羽

2020-07-21 20:57:50

MySQL从5.7版本开始支持原生JSON数据类型,并提供了一系列函数用于高效操作JSON字段,涵盖创建、查询、修改、验证等核心功能。以下是具体操作指南:

一、插入/创建JSON数据
  1. JSON_OBJECT()将键值对转换为JSON对象,语法为JSON_OBJECT(key, value, ...)。示例

    INSERT INTO users (info) VALUES (JSON_OBJECT('name', '张三', 'age', 25, 'hobbies', JSON_ARRAY('reading', 'swimming')));
  2. JSON_ARRAY()将值转换为JSON数组,语法为JSON_ARRAY(val1, val2, ...)。示例

    INSERT INTO tags (data) VALUES (JSON_ARRAY('mysql', 'json', 'database'));
  3. 直接插入合法JSON字符串若字符串符合JSON格式,可直接插入:

    INSERT INTO products (specs) VALUES ('{"color": "red", "size": "XL"}');
二、查询JSON字段
  1. JSON_EXTRACT(json_col, path)根据路径提取值,返回带引号的JSON格式。示例

    SELECT JSON_EXTRACT(info, '$.name') FROM users; -- 返回: "张三"
  2. -> 操作符等价于JSON_EXTRACT,返回JSON格式。示例

    SELECT info->'$.age' AS age FROM users; -- 返回: 25
  3. ->> 操作符返回去引号的纯文本值。示例

    SELECT info->>"$.name" AS name FROM users; -- 返回: 张三
  4. 路径表达式规则

    $:根节点。

    .key:对象属性(如$.name)。

    [index]:数组元素(如$.hobbies[0])。

    示例

    SELECT info->>'$.hobbies[1]' FROM users; -- 返回: swimming
三、修改JSON数据
  1. JSON_SET(json_doc, path, val, ...)设置值,若键存在则更新,不存在则添加。示例

    UPDATE users SET info = JSON_SET(info, '$.age', 26, '$.city', '北京');
  2. JSON_INSERT(json_doc, path, val, ...)仅当键不存在时插入值。示例

    UPDATE users SET info = JSON_INSERT(info, '$.gender', '男'); -- 仅当gender不存在时生效
  3. JSON_REPLACE(json_doc, path, val, ...)仅当键存在时替换值。示例

    UPDATE users SET info = JSON_REPLACE(info, '$.age', 30); -- 仅当age存在时生效
  4. JSON_REMOVE(json_doc, path, ...)删除指定路径的元素。示例

    UPDATE users SET info = JSON_REMOVE(info, '$.temp_flag');
四、验证与判断JSON
  1. JSON_VALID(json_string)检查字符串是否为合法JSON,返回1(是)或0(否)。示例

    SELECT JSON_VALID('{"name": "test"}'); -- 返回: 1SELECT JSON_VALID('invalid json'); -- 返回: 0
  2. JSON_CONTAINS(json_col, target, path)判断JSON是否包含指定值(支持嵌套路径)。示例

    SELECT * FROM users WHERE JSON_CONTAINS(info, '"北京"', '$.city'); -- 查询city为北京的用户
  3. JSON_OVERLAPS(a, b)判断两个JSON数组是否有相同元素。示例

    SELECT JSON_OVERLAPS( JSON_ARRAY('mysql', 'json'), JSON_ARRAY('json', 'database')); -- 返回: 1(因'json'重复)
五、注意事项
  1. 路径表达式区分大小写:$.Name与$.name视为不同路径。
  2. 数组索引从0开始:$.hobbies[0]表示第一个元素。
  3. 性能优化:频繁查询的JSON字段可考虑生成虚拟列并建立索引。
  4. 版本兼容性:确保MySQL版本≥5.7,部分函数(如JSON_OVERLAPS)需≥8.0.17。

通过掌握上述函数,可高效处理MySQL中的JSON数据,满足复杂业务场景需求。