mysql - 在 MySQL 中提取 JSON 数组的某些成员
问题描述
我在 MySQL 中有一个表,其中每一行都包含从另一个系统返回的 JSON。JSON 将类似于:
[{"userId": "Dave"},{"userId": "Mary", "errorCode" : "DB Fail"}, {"userId": "Lorenza", "errorCode": "Web Error"}]
我只对包含错误代码的数组成员感兴趣。将来,这些将被解析为它们自己表的单独行,但与此同时,MySql 是否提供了一种仅使用 errorCode 提取这些行的方法?
我可以使用 JSON_EXTRACT 仅提取错误代码
JSON_EXTRACT(jsonData, '$[*].errorCode') AS errorCodes
但我真的想要成员的其余部分(上面示例中的 userId)
解决方案
我不认为你可以在没有元素数量边界的情况下使用单个查询来做到这一点,但你可以使用存储过程来运行循环。
例如,每次迭代都运行 LOCATE 以找到“errorCode”的位置,并使用该位置运行 SUBSTR 和/或 SUBSTRING_INDEX 以获取用户 ID 值并将其附加到另一个变量。循环变量将只是 LOCATE 查询中使用的偏移量。
推荐阅读
- c++ - 2个单链表节点可以在c ++中相互指向吗?
- swift - 按钮不会通过触摸到 iOS 14 上的集合视图单元格
- spring - Mockito/Spring:仅模拟 Autowired Service 中的一项功能
- liferay - 如何在任何流行的搜索引擎中隐藏 Liferay Portal,使其不被索引?
- javascript - 扩展 Promise 基类类型
- java - 保持活动运行
- php - mfpdf 中的 WriteHTML 显示正方形
- kubernetes - 何时在 Kubernetes 中选择“LoadBalancer”而不是“NodePort”服务类型(反之亦然)以对外公开服务?
- amazon-web-services - Dynamo DB UPDATE_SKIP_NULL_ATTRIBUTES 行为将未建模的 Number 属性更新为“0”
- python - Python中6个小写字母可以有多少个密码组合