JSON列元素的子查询
我在Postgres DB中有一列名为response_return的大型JSON数据,其响应如下:JSON列元素的子查询,json,postgresql,Json,Postgresql,我在Postgres DB中有一列名为response_return的大型JSON数据,其响应如下: { "customer_payment":{ "OrderId":"123456789", "Customer":{ "Full_name":"Francis" }, "Payment":{ "AuthorizationCode":"9874565", "Recurrent":fa
{
"customer_payment":{
"OrderId":"123456789",
"Customer":{
"Full_name":"Francis"
},
"Payment":{
"AuthorizationCode":"9874565",
"Recurrent":false,
"Authenticate":false,
...
}
}
}
我尝试使用Postgres函数,如->
,->
,#>
或@>
遍历标题,以实现查询的授权代码
当我在SELECT中的customer\u payment中使用->
时,会返回后面的所有内容。如果我尝试使用OrderId,它将返回NULL
备选方案和来源:
操作员->
- 允许您根据元素名称选择元素李>
- 允许您根据数组的索引选择数组中的元素李>
- 可以按顺序使用:::json->'elementL'->'subelementM'->…->'subsubsubelementN'李>
- 返回类型为json,结果不能与需要基于字符串的数据类型的函数和运算符一起使用。但结果可以用于需要json数据类型的运算符和函数
这没有帮助,因为我不需要过滤器,也不认为需要转换为数组。如果您只想获得单个属性,可以使用:
select response_return -> 'customer_payment' -> 'Payment' ->> 'AuthorizationCode'
from the_table;
您需要使用->
作为对键的中间访问(以保持JSON类型),并使用->
作为最后一个键以字符串形式返回值
或者,您可以将元素的路径作为数组提供,并使用#>>
你好,一匹没有名字的马,谢谢你的询问。我的Postgres版本是11.6,例如,我需要授权码或重复性代码。谢谢一匹没有名字的马!成功了。捕获是use->和after->。
select response_return #>> array['customer_payment', 'Payment', 'AuthorizationCode']
from the_table;