路径类似于文件系统上的路径:每个值按照指定的顺序进一步深入树的叶子。从通过路径提取特定的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键类似于文件夹,而数组索引则类似于文件。
json
表示。 - Jim Jones