是否可以获取JSON对象的字段(即JSON对象的字段)而无需强制转换两次?

时间:2018-11-24 21:56:48

标签: postgresql

第二种方法是获得第二种结果的唯一方法还是其他可能的方法?

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...

1 个答案:

答案 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的计算机上。我没有测试上述查询)