场景:

       昨天为解决业务需求,需要在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

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐