我们可以使用->
和->>
运算符访问PostgreSQL 9.3中的任何JSON元素。在我看来,#>
和#>>
只提供了编写JSON路径的较短形式。或者#>
运营商背后是否有更大的图片?它是否有特殊用途/提供箭头符号的任何优势?哪一种是写入路径的优先方法?
这一切都是为了问题:我为什么要在#>
和#>>
上使用->
和->>
运算符?
The docs对此有点神秘。
以下两个查询都给出了相同的结果:
=> 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
答案 0 :(得分:4)
考虑嵌套。
{
"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']