在MySQL中查询包含对象数组的JSON列

3

我有一个列中包含以下JSON数组:

[  
   {  
      "day": 1,
      "requests": 23
   },
   {  
      "day": 2,
      "requests": 5
   },
   {  
      "day": 2,
      "requests": 9
   }
]

我希望能够获取拥有天数为1的行。我已经尝试使用以下方法:

SELECT * FROM api WHERE usages->'$[*].day' = JSON_ARRAY(1)

但是它没有返回任何结果。

3
请尝试访问 dbfiddle,这是一个网站链接,你可以在其中测试和运行MySQL数据库。 - wchiquito
2
@wchiquito 你应该将它发布为答案。 - Lukasz Szozda
谢谢@LukaszSzozda,但Schwern的答案包含了我的建议。 - wchiquito
@wchiquito 在我写下这篇回答的时候,Schwern 的回答已经被删除了。你可以通过 https://stackoverflow.com/posts/52130389/revisions 进行查看。无论如何,干得好,继续加油 :) - Lukasz Szozda
1个回答

3

select usages->'$[*].day' from api 表明这是一个JSON数组 [1,2,2]

where usages->'$[*].day' = JSON_ARRAY(1) 试图将 [1,2,2][1] 进行匹配,但这是不正确的。

相反,使用JSON_CONTAINS查找数组中的值。

where json_contains(usages->'$[*].day', "1");


[1,2,2] 怎么等于 1?where usages->'$[*].day' = 1. 这个查询返回 0 行。反例演示 - Lukasz Szozda
@LukaszSzozda 哎呀,不好意思。我得安装MySQL才能记起他们的JSON是怎么工作的。 - Schwern

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接