繁体   English   中英

如何在 sqlite 中的嵌套 json object 中迭代数组?

[英]How do I iterate over an array in a nested json object in sqlite?

假设我有一个 sqlite 表features ,它的列data包含 json 对象。

CREATE TABLE features ( id INTEGER PRIMARY KEY, data json )

现在,示例数据 object 可能是:

{"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 对象。 我如何 go 关于迭代一个文档的数组并从中提取值,这样我就可以 select 一个文档的最小值或最大值?

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

请参阅演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM