在MySQL中提取JSON数组的某些成员

时间:2018-06-06 11:20:49

标签: mysql json

我在MySQL中有一个表,其中每一行包含从另一个系统返回的JSON。 JSON看起来像:

[{"userId": "Dave"},{"userId": "Mary", "errorCode" : "DB Fail"}, {"userId": "Lorenza", "errorCode": "Web Error"}]

我只对包含错误代码的数组成员感兴趣。将来,这些将被解析为他们自己的表的单独行,但同时MySql提供了一种仅使用errorCode提取这些行的方法吗?

我可以使用JSON_EXTRACT仅提取errorCodes

JSON_EXTRACT(jsonData, '$[*].errorCode') AS errorCodes

但我真的想要其余成员(上例中的userId)

2 个答案:

答案 0 :(得分:0)

您可以使用JSON_CONTAINS函数查找带有errorCode的记录,然后在这些记录上使用JSON_EXTRACT。将JSON_CONTAINS放在where子句

答案 1 :(得分:0)

我认为你不能用没有已知元素数量边界的单个查询来做这件事,但是你可以使用存储过程来运行循环。

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