在文档中,一些postgresql函数使用json 路径属性。例如,jsonb_set函数:
jsonb_set(target jsonb, path text[], new_value jsonb[, create_missing boolean])我找不到这类属性的任何规格说明。
例如,它可以用于根据数组的属性值检索数组元素吗?
发布于 2018-04-03 21:55:24
路径类似于文件系统上的路径:每个值沿着树的叶子(按您指定的顺序)进一步挖掘。一旦您通过路径提取特定的JSONB值,您就可以在需要时链接其他JSONB操作。当存在嵌套的JSONB对象时,使用带有JSONB路径的函数/运算符非常有用,但也可以处理简单的JSONB数组。
例如:
SELECT '{"a": 42, "b": {"c": [1, 2, 3]}}'::JSONB #> '{b, c}' -> 1;...should返回2。
路径{b,c}首先获得b的值,即{"c":1,2,3}。接下来,它深入获取c的值,即1、2、3。然后将->操作链接到c值上,得到数组指定索引处的值(使用基数为零的表示法,这样0是第一个元素,1是第二个元素,等等)。如果使用->,它将返回一个带有JSONB数据类型的值,而->>将返回一个带有文本数据类型的值。
但你也可以这样写:
SELECT '{"a": 42, "b": {"c": [1, 2, 3]}}'::JSONB #> '{b, c, 1}';...and简单地将键和数组索引包含在相同的路径中。
对于数组,以下两个应该是等价的,除非第一个使用路径,第二个则需要数组并在指定的索引处获取值:
SELECT '[1, 2, 3]'::JSONB #> '{1}';
SELECT '[1, 2, 3]'::JSONB -> 1;请注意,路径必须始终采用JSON数组语法,其中每个连续值都是要钻研到的树中的下一个叶。如果它是JSONB对象,则提供键;如果它是JSONB数组,则提供索引。如果这些是文件路径,则JSONB键类似于文件夹,数组索引类似于文件。
https://stackoverflow.com/questions/49627813
复制相似问题