【问题标题】:How do I iterate over an array in a nested json object in sqlite?如何迭代sqlite中嵌套json对象中的数组?
【发布时间】: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 对象。如何迭代一个文档的数组并从中提取值,然后我可以为一个文档选择最小值或最大值?

【问题讨论】:

    标签: arrays json sqlite


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 2021-10-23
      • 2023-03-21
      相关资源
      最近更新 更多