昨天为解决业务需求,需要在mysql 数据库中类型为json字段的列中提取指定的属性列表,因为之前对mysql数据库中操作json数据的经验比较少,特此记录下,以备以后回顾。

首先,展示下我数据库中保存的数据 (数据已做脱敏处理)

[{"id": "dad014a2f9594a62ae3f7be3", "del": 10, "code": "XC02104162990","orgId": "5e0364ff8139f600163ff", "state": 10, "staffId": "1b8cc278f7673793327fed0", "subjectId": "f107fe51abf9410df07a1a", "categoryId": "ef15a801af84ac6e1cef2", "createDate": 1618553801000, "createTime": 1618553801000, "totalAmount": 0, "salaryPeriod": 1617206400000, "createStaffId": "008e97367f600163e14efff"}, {"id": "4dd2f82b9a3f182ec", "del": 10, "code": "XC202104163517", "orgId": "5e0364ff81f600163e14efff", "state": 10, "staffId": "1b8cc20c8793327fed0", "subjectId": "cb0f52a4e0d71aed75f37a156", "categoryId": "ef15a4e581de4fac6e1cef2", "createDate": 1618553800000, "createTime": 1618553800000, "totalAmount": 0, "salaryPeriod": 1617206400000, "createStaffId": "008e97367f8e11e14efff"}]

业务需求,提取上述数据中的 subjectId 字段列表,实现sql如下:

SELECT json_extract( subject_json, '$[*].subjectId' ) AS subjectIds FROM  t; 

执行结果: ["f107fe51abf9410df07a1a", "cb0f52a4e0d71aed75f37a156"]  ,获得上述JSONArray 中每一个 JsonObject 中 key为  subjectId 的值数组

  1. subject_json 为上述数据所在字段。
  2. json_extract :mysql版本5.7及以上,用于取出 json 串中某个key对应的值

$[*].subjectId 表示获取当前字段内容下的所有 subjectId,如果只是想获取某一条,可以带上当前数据在数组中的序号获取,

比如:获取 第一条中的 subjectId ,$[1].subjectId

场景: 昨天为解决业务需求,需要在mysql 数据库中类型为json字段的列中提取指定的属性列表,因为之前对mysql数据库中操作json数据的经验比较少,特此记录下,以备以后回顾。 首先,展示下我数据库中保存的数据 (数据已做脱敏处理)[{"id": "dad014a2f9594a62ae3f7be3", "del": 10, "code": "XC02104162990","orgId": "5e0364ff8139f600163ff", "state": 10, ...
一、单个 json 的,获取 使用 json _ extract `select json _ extract ('{"name":"Zhaim","tel":"13240133388"}',"$.tel`"); 二、数组的 json 的,获取数组的长度使用 JSON _LENGTH SELECT id, JSON _LENGTH('[{"id":"10000004555096","name":"1.docx"},{"id":"10000004555098","name":"2.doc"},{"id":"1000000455509
用[N]代表 JSON 数组中 的第N个元素。序号从0开始。 用[M to N]代表 JSON 数组中 第M个至第N个元素。序号从0开始。 用.[*]通配符代表 JSON 对象 的所有子元素。 用[*]通配符代表 JSON 数组的所有元素。 用**通配符代表用某字符开头或结尾的元素。 *通配符的查询: mysql > SELECT JSON _ EXTRACT ('{"a": SELECT * FROM s_form sf where json _contains(sf.target_type,CONCAT('"',#{targetType},'"')) 数据库的 字段 为 需要查询target_type中包含’COUNTY’元素的数据 sql语句为: SELECT * FROM s_form sf where json _contains(sf.target_ty 解决日期转换异常 JSON parse error: Cannot deserialize value of type `java.util.Date` from String 小麟有点小靈: @JsonFormat不是后端传前端么?@DatetimeFormat才是前端传后端把? js 页面打印,兼容单个打印和分页批量打印,自定义页眉和简单页脚 aameng2016: 中间内容不固定,超过一张纸的高度怎么弄。。。 解决前端 js 中使用 append 动态追加元素标签后,事件和css样式异常问题 小白编码: 谢谢,搞好了 Java 开发代码片段【持续更新】 programmer_ada: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)使用更多的站内链接;(2)使用标准目录;(3)增加条理清晰的目录。 Mysql JSON_SEARCH 用法 _修铁路的: 你这不是 json,是数组,用 FIND_IN_SET('查询条件', ["aa","bb"] ) 试下