json - 搜索对象的 SQL JSON 数组

标签 json sql-server

我有一个包含 JSON 的 SQL 列,例如

{
"tags":[
{"id":11,"x":99.12343123213,"y":88.123232},
{"id":12,"x":99.12343123213,"y":88.123232},
{"id":13,"x":99.12343123213,"y":88.123232}
]
}

我正在尝试查找值为“13”的记录,但是对象的数量可能会有所不同。我知道我可以使用类似于以下内容的代码:
select * from Logs WHERE JSON_VALUE([log],'$.tags[0].id') LIKE '13'

不幸的是,数组中的对象数量可以是任意数量。如何在数组中的每个对象中搜索该值?

我知道我可以在字符串中搜索 '%"id":13,%' 的值,但这似乎是一个困惑的解决方案。

最佳答案

您可以使用 OPENJSON 提取 id来自您的 JSON 对象和 CROSS APPLY 的值给您的 logs表,仅选择具有 id 的行JSON 对象中的值 13:

SELECT logs.*
FROM logs
CROSS APPLY OPENJSON([log], '$.tags') WITH (id INT '$.id')
WHERE id = 13

Demo on dbfiddle

关于json - 搜索对象的 SQL JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54729222/

相关文章:

python - python 中压平 Json 文件的问题

php - 如何从 Laravel 中的第一个表访问第三个表

sql-server - 将重复序列连接到结果

arrays - 如何从包含对象数组的 json 中获取特定对象

JSON 键通配

javascript - 使用 php 将数组转换为 json,并使用 jquery 或 javascript 检索 json

sql - 如何按升序排列 SQL 数据透视表的列

asp.net - SQL 数据源 - 存储过程和返回参数

sql-server - 使用 select * 创建 View