gpt4 book ai didi

arrays - postgresql Json 路径功能

转载 作者:行者123 更新时间:2023-11-29 12:16:47 26 4
gpt4 key购买 nike

documentation一些 postgresql json 函数使用 json path 属性。例如 jsonb_set 函数:

jsonb_set(target jsonb, path text[], new_value jsonb[, create_missing boolean])

我找不到此类属性的任何规范。

它可以用于例如根据属性值检索数组元素吗?

最佳答案

路径类似于文件系统上的路径:每个值进一步向下钻取树的叶子(按照您指定的顺序)。通过路径提取特定的 JSONB 值后,您可以根据需要链接其他 JSONB 操作。当存在嵌套的 JSONB 对象时,将函数/运算符与 JSONB 路径结合使用最有用,但也可以处理简单的 JSONB 数组。

例如:

SELECT '{"a": 42, "b": {"c": [1, 2, 3]}}'::JSONB #> '{b, c}' -> 1;

...应该返回 2。

路径{b,c}首先得到b的值,即{"c": [1, 2, 3]}。接下来,它向下钻取以获取 c 的值,即 [1, 2, 3]。然后 -> 操作被链接到它上面,它获取该数组指定索引处的值(使用基数为零的表示法,因此 0 是第一个元素,1 是第二个元素,等等)。如果您使用 -> 那么它将返回一个具有 JSONB 数据类型的值,而 ->> 将返回一个具有 TEXT 数据类型的值。

但你也可以这样写:

SELECT '{"a": 42, "b": {"c": [1, 2, 3]}}'::JSONB #> '{b, c, 1}';

...并简单地将键和数组索引包含在同一路径中。

对于数组,下面两个应该是等价的,除了第一个使用路径,第二个需要一个数组并获取指定索引处的值:

SELECT '[1, 2, 3]'::JSONB #> '{1}';

SELECT '[1, 2, 3]'::JSONB -> 1;

请注意,路径必须始终采用 JSON 数组语法,其中每个连续值都是您要向下钻取的树中的下一个叶子。如果它是 JSONB 对象,则提供键;如果它是 JSONB 数组,则提供索引。如果这些是文件路径,则 JSONB 键就像文件夹,而数组索引就像文件。

关于arrays - postgresql Json 路径功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49627813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com