Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON列元素的子查询_Json_Postgresql - Fatal编程技术网

JSON列元素的子查询

JSON列元素的子查询,json,postgresql,Json,Postgresql,我在Postgres DB中有一列名为response_return的大型JSON数据,其响应如下: { "customer_payment":{ "OrderId":"123456789", "Customer":{ "Full_name":"Francis" }, "Payment":{ "AuthorizationCode":"9874565", "Recurrent":fa

我在Postgres DB中有一列名为response_return的大型JSON数据,其响应如下:

{ 
   "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;