当前位置 : 主页 > 数据库 > mysql >

MYSQL中的json数据操作代码

来源:互联网 收集:自由互联 发布时间:2022-12-24
目录 MYSQL中的json数据操作 1.2 基础查询操作 1.2.1 一般json查询 1.2.2 多个条件查询 1.2.3 json中多个字段关系查询 1.2.4 关联表查询 1.3 JSON函数操作 1.3.1 官方json函数 1.3.2 -、-区别 1.3.2.2 在w
目录
  • MYSQL中的json数据操作
  • 1.2 基础查询操作
    • 1.2.1 一般json查询
    • 1.2.2 多个条件查询
    • 1.2.3 json中多个字段关系查询
    • 1.2.4 关联表查询
  • 1.3 JSON函数操作
    • 1.3.1 官方json函数
    • 1.3.2 ->、->>区别
      • 1.3.2.2 在where条件中使用
    • 1.3.3 json_extract():从json中返回想要的字段
      • 1.3.4 JSON_CONTAINS():JSON格式数据是否在字段中包含特定对象
        • 1.3.5 SON_OBJECT():将一个键值对列表转换成json对象
          • 1.3.6 JSON_ARRAY():创建JSON数组
            • 1.3.7 JSON_TYPE():查询某个json字段属性类型
              • 1.3.8 JSON_KEYS():JSON文档中的键数组
                • 1.3.10 JSON_INSERT():插入值(往json中插入新值,但不替换已经存在的旧值)
                  • 1.3.11 JSON_REPLACE()
                    • 1.3.12 JSON_REMOVE():从JSON文档中删除数据

                    MYSQL中的json数据操作

                    1.2 基础查询操作

                    用法提示:

                    • 如果json字符串不是数组,则直接使用$.字段名
                    • 如果json字符串是数组[Array],则直接使用$[对应元素的索引id]

                    1.2.1 一般json查询

                    使用json字段名->’$.json属性’进行查询条件,注意:如果 ‘->’ 不能用也可用 ‘->>’ 查询
                    举个例子:如果想查询deptLeader=张五的数据,那么sql语句如下:

                    SELECT * from dept WHERE json_value->'$.deptLeaderId'='5';
                    

                    1.2.2 多个条件查询

                    比如想查dept为“部门3”和deptLeaderId=5的数据,sql如下:

                    SELECT * from dept WHERE json_value->'$.deptLeaderId'='5' and json_value->'$.deptId'='5';
                    

                    1.2.3 json中多个字段关系查询

                    比如想查询json格式中deptLeader=张五和deptId=5的数据

                    SELECT * from dept WHERE json_value->'$.deptLeaderId'='5' and json_value->'$.deptId'='5';
                    

                    1.2.4 关联表查询

                    这里我们要连表查询在dept 表中部门leader在dept_leader 中的详情

                    SELECT * from dept,dept_leader 
                    WHERE dept.json_value->'$.deptLeaderId'=dept_leader.json_value->'$.id' ;

                    1.3 JSON函数操作

                    写到这里大家都发现了,我们查询的json都是整条json数据,这样看起来不是很方便,那么如果我们只想看json中的某个字段怎么办?

                    1.3.1 官方json函数

                    NameDescription解释->Return value from JSON column after evaluating path; equivalent to JSON_EXTRACT()计算路径后返回JSON列的值;相当于JSON_EXTRACT ()->>Return value from JSON column after evaluating path and unquoting the result; equivalent to JSON_UNQUOTE(JSON_EXTRACT()).从JSON列返回值后,就算路径和取消引号的结果;相当于JSON_UNQUOTE (JSON_EXTRACT ())JSON_ARRAY()Create JSON array创建JSON数组JSON_ARRAY_APPEND()Append data to JSON document向JSON文档追加数据JSON_ARRAY_INSERT()Insert into JSON array插入JSON数组JSON_CONTAINS()Whether JSON document contains specific object at pathJSON文档是否包含路径上的特定对象JSON_CONTAINS_PATH()Whether JSON document contains any data at pathJSON文档是否在路径上包含任何数据JSON_DEPTH()Maximum depth of JSON documentJSON文档的最大深度JSON_EXTRACT()Return data from JSON document从JSON文档返回数据JSON_INSERT()Insert data into JSON document将数据插入JSON文档JSON_KEYS()Array of keys from JSON document来自JSON文档的键数组JSON_LENGTH()Number of elements in JSON documentJSON文档中的元素数量JSON_MERGE_PATCH()Merge JSON documents, replacing values of duplicate keys合并JSON文档,替换重复键的值JSON_MERGE_PRESERVE()Merge JSON documents, preserving duplicate keys合并JSON文档,保留重复的密钥JSON_OBJECT()Create JSON object创建JSON对象JSON_OVERLAPS()Compares two JSON documents, returns TRUE (1) if these have any key-value pairs or array elements in common, otherwise FALSE (0)比较两个JSON文档,如果它们有共同的键值对或数组元素,则返回TRUE(1),否则返回FALSE (0)JSON_PRETTY()Print a JSON document in human-readable format以人类可读的格式打印JSON文档JSON_QUOTE()Quote JSON document引用JSON文档JSON_REMOVE()Remove data from JSON document从JSON文档中删除数据JSON_REPLACE()Replace values in JSON document替换JSON文档中的值JSON_SCHEMA_VALID()Validate JSON document against JSON schema; returns TRUE/1 if document validates against schema, or FALSE/0 if it does not针对JSON模式验证JSON文档;如果文档针对模式进行验证,则返回TRUE/1,否则返回FALSE/0JSON_SCHEMA_VALIDATION_REPORT()Validate JSON document against JSON schema; returns report in JSON format on outcome on validation including success or failure and reasons for failure针对JSON模式验证JSON文档;以JSON格式返回关于验证结果的报告,包括成功或失败以及失败原因JSON_SEARCH()Path to value within JSON documentJSON文档中值的路径JSON_SET()Insert data into JSON document将数据插入JSON文档JSON_STORAGE_FREE()Freed space within binary representation of JSON column value following partial update在部分更新后释放JSON列值的二进制表示形式中的空间JSON_STORAGE_SIZE()pace used for storage of binary representation of a JSON document用于存储JSON文档的二进制表示的空间JSON_TABLE()Return data from a JSON expression as a relational table以关系表的形式从JSON表达式返回数据JSON_TYPE()Type of JSON valueJSON值类型JSON_UNQUOTE()Unquote JSON value不引用JSON值JSON_VALID()Whether JSON value is validJSON值是否有效JSON_VALUE()Extract value from JSON document at location pointed to by path provided; return this value as VARCHAR(512) or specified type根据所提供的路径从JSON文档中所指向的位置提取值;返回该值为VARCHAR(512)或指定的类型MEMBER OF()Returns true (1) if first operand matches any element of JSON array passed as second operand, otherwise returns false (0)如果第一个操作数匹配作为第二个操作数的JSON数组中的任何元素,则返回true(1),否则返回false (0)

                    1.3.2 ->、->>区别

                    ->field中使用的时候结果带引号,->>的结果不带引号

                    1.3.2.2 在where条件中使用

                    特别注意:->当做where查询是要注意类型的,->>是不用注意类型的

                    1.3.3 json_extract():从json中返回想要的字段

                    用法:json_extract(字段名,$.json字段名)

                    select id,json_extract(json_value,'$.deptName') as deptName from dept;

                    1.3.4 JSON_CONTAINS():JSON格式数据是否在字段中包含特定对象

                    用法: JSON_CONTAINS(target, candidate[, path])
                    事例:如果我们想查询包含deptName=部门5的对象

                    select * from dept WHERE JSON_CONTAINS(json_value, JSON_OBJECT("deptName","部门5"))
                    

                    1.3.5 SON_OBJECT():将一个键值对列表转换成json对象

                    比如我们想查询某个对象里面的值等于多少
                    比如我们添加这么一组数据到dept表中:

                    insert into dept VALUES(6,'部门9','{"deptName": {"dept":"de","depp":"dd"}, "deptId": "5", "deptLeaderId": "5"}');

                    我们可以看到deptName中还有一个对象,里面还有dept和depp两个属性字段,那么我们应该怎么查询depp=dd的员工呢。

                    用法:JSON_OBJECT([key, val[, key, val] …])
                    事例:

                    SELECT * from (
                        SELECT *,json_value->'$.deptName' as deptName FROM dept
                    ) t WHERE JSON_CONTAINS(deptName,JSON_OBJECT("depp","dd"));

                    1.3.6 JSON_ARRAY():创建JSON数组

                    比如我们添加这么一组数据到dept表中:

                    insert into dept VALUES(7,'部门9','{"deptName": ["1","2","3"], "deptId": "5", "deptLeaderId": "5"}');
                    insert into dept VALUES(7,'部门9','{"deptName": ["5","6","7"], "deptId": "5", "deptLeaderId": "5"}');

                    用法:JSON_ARRAY([val[, val] …])

                    事例:我们要查询deptName包含1的数据

                    SELECT * from dept WHERE JSON_CONTAINS(json_value->'$.deptName',JSON_ARRAY("1"))
                    

                    1.3.7 JSON_TYPE():查询某个json字段属性类型

                    用法:JSON_TYPE(json_val)
                    事例:比如我们想查询deptName的字段属性是什么

                    SELECT json_value->'$.deptName' ,JSON_TYPE(json_value->'$.deptName') as type from dept 
                    

                    1.3.8 JSON_KEYS():JSON文档中的键数组

                    用法:JSON_KEYS(json_value)
                    事例:比如我们想查询json格式数据中的所有key

                    SELECT JSON_KEYS(json_value) FROM dept 

                    接下来的3种函数都是新增数据类型的:
                    JSON_SET(json_doc, path, val[, path, val] …)
                    JSON_INSERT(json_doc, path, val[, path, val] …)
                    JSON_REPLACE(json_doc, path, val[, path, val] …)1.3.9 JSON_SET():将数据插入JSON格式中,有key则替换,无key则新增

                    这也是我们开发过程中经常会用到的一个函数
                    用法:JSON_SET(json_doc, path, val[, path, val] …)
                    事例:比如我们想针对id=2的数据新增一组:newData:新增的数据,修改deptName为新增的部门1
                    sql语句如下:

                    update dept set json_value=JSON_SET('{"deptName": "部门2", "deptId": "2", "deptLeaderId": "4"}','$.deptName','新增的部门1','$.newData','新增的数据') WHERE id=2;
                    

                    注意json_doc如果不带这个单元格之前的值,之前的值是会新值被覆盖的,比如我们如果更新的语句换成:

                    update dept set json_value=JSON_SET('{"a":"1","b":"2"}','$.deptName','新增的部门1','$.newData','新增的数据') WHERE id=2我们可以看到这里json_doc是{“a”:“1”,“b”:“2”},这样的话会把之前的单元格值覆盖后再新增/覆盖这个单元格字段
                    

                    1.3.10 JSON_INSERT():插入值(往json中插入新值,但不替换已经存在的旧值)

                    用法:JSON_INSERT(json_doc, path, val[, path, val] …)
                    事例:

                    UPDATE dept set json_value=JSON_INSERT('{"a": "1", "b": "2"}', '$.deptName', '新增的部门2','$.newData2','新增的数据2') 
                    WHERE id=2

                    我们可以看到由于json_doc变化将之前的值覆盖了,新增了deptNamenewData2.
                    如果我们再执行以下刚才的那个sql,只是换了value,我们会看到里面的key值不会发生变化。
                    因为这个函数只负责往json中插入新值,但不替换已经存在的旧值。

                    1.3.11 JSON_REPLACE()

                    用法:JSON_REPLACE(json_doc, path, val[, path, val] …)
                    用例:
                    如果我们要更新id=2数据中newData2的值为:更新的数据2
                    sql语句如下:

                    UPDATE dept set json_value=JSON_REPLACE('{"a": "1", "b": "2", "deptName": "新增的部门2", "newData2": "新增的数据2"}', '$.newData2', '更新的数据2') WHERE id =2;
                    

                    1.3.12 JSON_REMOVE():从JSON文档中删除数据

                    用法:JSON_REMOVE(json_doc, path[, path] …)
                    举例:删除key为a的字段。

                    UPDATE dept set json_value=JSON_REMOVE('{"a": "1", "b": "2", "deptName": "新增的部门2", "newData2": "更新的数据2"}','$.a') WHERE id =2;
                    

                    到此这篇关于MYSQL中的json数据操作的文章就介绍到这了,更多相关mysql json数据内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

                    上一篇:一文搞懂什么是MySQL前缀索引
                    下一篇:没有了
                    网友评论