如何迭代sqlite中嵌套json对象中的数组?
Posted
技术标签:
【中文标题】如何迭代sqlite中嵌套json对象中的数组?【英文标题】:How do I iterate over an array in a nested json object in sqlite? 【发布时间】:2021-08-21 04:40:47 【问题描述】:假设我有一个 sqlite 表 features
,其中有一列 data
包含 json 对象。
CREATE TABLE features ( id INTEGER PRIMARY KEY, data json )
现在,一个示例数据对象可能是:
"A":
"B":
"coordinates":[
"x":1, "y":10,
"x":10, "y":2,
"x":12, "y":12
]
现在coordinates
数组中的 json 对象的数量可以因行而异。一些文档可以有 3 个坐标(上例),而其他文档可能有 5 个或更多坐标。
对于每一行或文档,我希望能够仅迭代 x
值并找到最小值,y
值相同。因此,该示例的结果将是 x 为 1,y 为 2。
我可以使用 json_each
获取数组中的所有 json 对象,但我不能仅提取一行的 x。我试过了:
select value from features, json_each(json_extract(features.data, '$.A.B.coordinates'));
但是,这似乎为所有行返回“全部”coordinate
json 对象。如何迭代一个文档的数组并从中提取值,然后我可以为一个文档选择最小值或最大值?
【问题讨论】:
【参考方案1】:在json_each(json_extract())
之后再次使用json_extract()
提取每个x
和y
并聚合:
SELECT f.id,
MIN(json_extract(value, '$.x')) x,
MIN(json_extract(value, '$.y')) y
FROM features f, json_each(json_extract(f.data, '$.A.B.coordinates'))
GROUP BY f.id
请参阅demo。
【讨论】:
以上是关于如何迭代sqlite中嵌套json对象中的数组?的主要内容,如果未能解决你的问题,请参考以下文章
解析嵌套的 JSON 并将其保存到 SQLite 中,然后检索它