首页 > 解决方案 > 在 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)

标签: mysqljson

解决方案


我不认为你可以在没有元素数量边界的情况下使用单个查询来做到这一点,但你可以使用存储过程来运行循环。

例如,每次迭代都运行 LOCATE 以找到“errorCode”的位置,并使用该位置运行 SUBSTR 和/或 SUBSTRING_INDEX 以获取用户 ID 值并将其附加到另一个变量。循环变量将只是 LOCATE 查询中使用的偏移量。


推荐阅读