如何迭代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() 提取每个xy 并聚合:

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 中,然后检索它

如何迭代嵌套的 JSON 对象 [重复]

在 react-native 中迭代 JSON 数组

如何在 REACT JS API 调用中迭代 JSON 嵌套数组?

如何在 Ios 中解析数组数据中的嵌套 Json 对象

如何迭代由json对象中的键访问的数组[重复]