第二种方法是获得第二种结果的唯一方法还是其他可能的方法?
1。
select '{"a": [{"b":1}]}'::jsonb -> 'a' ->> 0;
---
{"b": 1}
2。
select ('{"a": [{"b":1}]}'::jsonb -> 'a' ->> 0)::jsonb -> 'b';
---
1
3。
select '{"a": [{"b":1}]}'::jsonb -> 'a' ->> 0 -> 'b';
---
No operator matches the given name and argument types...
答案 0 :(得分:2)
2
中可能只需要 casting(返回json),因为您正在通过a
将->>
的第一个元素转换为文本。请尝试以下方法:
select '{"a": [{"b":1}]}'::jsonb -> 'a' -> 0 -> 'b';
它应该工作并返回1(作为json对象),然后您可能必须将其转换为int或其他适当的类型以在任何计算中重用。
或者,这也应该起作用,并且也较短:
select '{"a": [{"b":1}]}'::jsonb #> '{a,0,b}';
(披露:我不在使用Postgresql的计算机上。我没有测试上述查询)