繁体   English   中英

如何在postgres中查询嵌套数组JSON?

[英]how to query nested array JSON in postgres?

我在POSTGRES表之一中存储了以下JSON文档结构

链接到示例JSON在这里

在该JSON中,我在嵌套数组中具有以下结构,

"product_order_reference": {
                            "purchase_order_number": "0007-8653547-0590"
                        }

我正在尝试检索具有提供的采购订单编号的JSON,我尝试在查询下面进行查询,即使它们是该采购订单编号的JSON行,查询也不返回任何内容

我试过的查询:

SELECT * from edi_records , jsonb_array_elements(valid_record :: jsonb ->'loop_id_hls') hls,jsonb_array_elements(hls->'loop_id_hlo') hlo where hlo->'product_order_reference' ->> 'purchase_order_number' = '0007-8653547-0590';


SELECT * from edi_records , jsonb_array_elements(valid_record :: jsonb ->'loop_id_hls') hls,jsonb_array_elements(hls->'loop_id_hlo') hlo where hlo ->> 'purchase_order_number' = '0007-8653547-0590';


SELECT * from edi_records , jsonb_array_elements(valid_record :: jsonb ->'advance_shipment_notice'::text->'loop_id_hls') hls,jsonb_array_elements(hls->'loop_id_hlo') hlo where hlo ->> 'purchase_order_number' = '0007-8653547-0590';



SELECT track_num from edi_records , jsonb_array_elements(valid_record :: jsonb ->'advance_shipment_notice'->'loop_id_hls') hls,jsonb_array_elements(hls->'loop_id_hlo') hlo where hlo -> 'product_order_reference'->> 'purchase_order_number' ::text = '0007-8653547-0590';

有人能帮我解决这个问题吗,我被困在这里。

我复制并粘贴了您的JSON对象。 它有点大,但是我可以得到订单号。 主要麻烦是所有嵌套数组。

缺点是我正在手动挖掘json对象。 如果结构发生更改,或者键包含重复的对象,需要进行一些搜索,那么结果将是错误的。 我相信这可以改善。

SELECT
  your_json -> 'advance_shipment_notice'
    -> 'loop_id_hls'
    -> 0 -- {loop_id_hls}
    -> 'loop_id_hlo'
    -> 0 -- {loop_id_hlo}
    -> 'product_order_reference'
    -> 'purchase_order_number' AS purchase_order_number
FROM your_json;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM