如何迭代 sqlite 中嵌套 json 对象中的数组?

skb*_*hmn 4 arrays sqlite json

假设我有一个 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}
       ]
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,数组中 json 对象的数量coordinates可以随行而变化。有些文档可以有 3 个坐标(上面的示例),而其他文档可能有 5 个或更多坐标。

对于每一行或文档,我希望能够仅迭代x值并找到最小值,对于y值也是如此。因此,该示例的结果对于 x 来说是 1,对于 y 来说是 2。

我可以使用数组内的所有 json 对象json_each,但无法仅提取一行的 x 。我试过:

select value from features, json_each(json_extract(features.data, '$.A.B.coordinates'));
Run Code Online (Sandbox Code Playgroud)

但是,这似乎返回coordinate所有行的“所有”json 对象。如何迭代一个文档的数组并从中提取值,以便我可以为一个文档选择最小值或最大值?

for*_*pas 5

再次使用json_extract()afterjson_each(json_extract())来提取每个xandy并聚合:

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
Run Code Online (Sandbox Code Playgroud)

请参阅演示