5

我们可以使用->and->>运算符访问 PostgreSQL 9.3 中的任何 JSON 元素。在我看来,#>with#>>只提供了一种较短的 JSON 路径编写形式。还是运营商背后有更大的图景#>?它是否有特殊用途/比箭头符号有任何优势?哪一种是编写路径的首选方法?

这一切都涉及到一个问题:为什么我应该使用#>and#>>运算符而不是->and ->>

文档对此有点神秘。

下面的两个查询都给出相同的结果:

=> select '{"a":[1,2,3],"b":[4,5,6]}'::json#>'{a,2}';
 ?column? 
----------
 3

=> select '{"a":[1,2,3],"b":[4,5,6]}'::json->'a'->>2;
 ?column? 
----------
 3
4

1 回答 1

6

考虑嵌套。

{
  "a" : {
    "b" : {
      "c" : 1,
      "d" : 2
    }
  }
}

想象一下,你有一个 json 文档,而你事先并不知道它是如何嵌套的。如果你知道你需要一个三层路径,你可以这样写:

SELECT '{
  "a" : {
    "b" : {
      "c" : 1,
      "d" : 2
    }
  }
}'::json -> 'a' -> 'b' -> 'c';

但是如果你想写一个事先不知道的查询呢?这就是基于路径的运算符有用的地方。路径可以与文档一起提供,并且不再对查询中的文档结构进行任何假设。

SELECT '{
  "a" : {
    "b" : {
      "c" : 1,
      "d" : 2
    }
  }
}'::json #>> ARRAY['a','b','c']
于 2014-01-21T02:19:01.397 回答