如何使用和在MYSQL中查询JSON数组

如何使用和在MYSQL中查询JSON数组,mysql,json,Mysql,Json,如果我在mysql数据库的列中有如下json [ { "name": "John", "checked": true }, { "name": "Lucy", "checked": false } ] 如何在mysql中选择同一对象名为'John'且checked=true的所有行 json对象可能有更多的键,并且键的顺序可能不特定。如果键的顺序始终相同,则可以尝试匹配字符串。假设您的专栏名为people SELECT IF(people LIKE '%[

如果我在mysql数据库的列中有如下json

[
 {
  "name": "John",
  "checked": true
 },
 {
  "name": "Lucy",
  "checked": false
 }
]
如何在mysql中选择同一对象名为'John'且checked=true的所有行


json对象可能有更多的键,并且键的顺序可能不特定。

如果键的顺序始终相同,则可以尝试匹配字符串。假设您的专栏名为
people

   SELECT
   IF(people LIKE '%[
     {
      \"name\": \"John\",
      \"checked\": true%', TRUE, FALSE) AS 'john_checked'
   FROM table
   WHERE (people LIKE '%[
     {
      \"name\": \"John\",
      \"checked\": true%')
有了这个解决方案的知识,您可以创建一个较短的SQL,如下所示。您可以单独使用它,也可以将其用作将返回所有行的查询的where子句中的子查询

   SELECT
   IF(people LIKE '%\"checked\": true%', TRUE, FALSE) AS 'john_checked'
   FROM table
   WHERE (people LIKE '%\"name\": \"John\"%')
您可能会看到,JSON不适合存储在mySQL中

更好的解决方案是将数据库设计为关系型数据库,即有一个名为
people
的附加表和一个链接数据的列。说到如何设计它,我需要更多地了解您的数据/主题,但您应该了解SQL“连接”和规范化

还有其他一些问题讨论mySQL中的JSON,例如和


在mySQL 5.7中,有一些与json相关的函数。请参阅,以及。

以下是如何在postgresql中执行此操作:

create table users (data jsonb);'

insert into users values ('[{"name": "John", "checked": "true"}, {"name": "Lucy", "checked": "false"}]'),('[{"name": "John", "checked": "false"}, {"name": "Lucy", "checked": "false"}]'),('[{"name": "John", "checked": "false"}, {"name": "Lucy", "checked": "true"}]');

select * from users, jsonb_array_elements(users.data) obj
where obj->>'name' = 'John' and obj->>'checked' = 'true';


    data                                     |                value
-----------------------------------------------------------------------------+-------------------------------------
 [{"name": "John", "checked": "true"}, {"name": "Lucy", "checked": "false"}] | {"name": "John", "checked": "true"}
(1 row)

只需使用JSON,它包含:

SELECT * from `users`
WHERE JSON_CONTAINS(`data`, '{"name": "John","checked": true}');

如果你看一看这个问题,你会发现我说JSON对象可能有更多的键,它们的顺序可能不同。所以你做到了,希望我关于如何使用SQL匹配JSON的示例说明了它的困难。我链接了两个关于问题的详细信息的线程,它们倾向于使用noSQL提供建议。我对mySQL 5.7不太熟悉,但有一个链接。我不希望你的问题被完全忽略。谢谢,但我想知道,当任意数量的键可以按任何顺序排列时,是否有一种方法可以使用mySQL函数进行选择。我添加了第二个SQL代码段。从本质上讲,您最好是:如果行中包含
“name”:“John”
,则只获取该行,然后使用代码/脚本解码json;或者不在mySQL中存储json,而是创建一个包含更多表的关系数据库(或者使用noSQL解决方案)。只有您知道您要处理的解决方案。该代码段的问题是,它会找到John为false但Lucy为true的行。如果json为{“name”:John,“male”:true,“checked”:true},这是否有效?是的。它不依赖于其他字段或json/request中的字段顺序。太棒了,谢谢!第一次有人花时间回答我的一个老问题,所以我真的很感激!