簡體   English   中英

從 PostgreSQL 中的 json 嵌套鍵中提取值

[英]Extract value from json nested key in PostgreSQL

    {
"problems": [{
    "Diabetes":[{
        "medications":[{
            "medicationsClasses":[{
                "className":[{
                    "associatedDrug":[{
                        "name":"asprin",
                        "dose":"",
                        "strength":"500 mg"
                    }],
                    "associatedDrug#2":[{
                        "name":"somethingElse",
                        "dose":"",
                        "strength":"500 mg"
                    }]
                }],
                "className2":[{
                    "associatedDrug":[{
                        "name":"asprin",
                        "dose":"",
                        "strength":"500 mg"
                    }],
                    "associatedDrug#2":[{
                        "name":"somethingElse",
                        "dose":"",
                        "strength":"500 mg"
                    }]
                }]
            }]
        }],
        "labs":[{
            "missing_field": "missing_value"
        }]
    }],
    "Asthma":[{}]
}]}

我試圖獲取“阿司匹林”名稱值。 meddetails 是一個列名。 Postgresql 分貝。

Select meddetails ->'problems' ->> 'Diabetes'->>'medications' ->>'className' ->>'associatedDrug'->>'name' from details;

我嘗試了幾種不同的查詢方式,除了“問題”之外,沒有一種方法可以解決問題。 然后我意識到您的 json 中有不必要的[...] 您應該刪除它們,然后它可以工作。

drop table if exists t;
create temp table t (meddetails json);


insert into t (meddetails)
values ('    {
"problems": {
    "Diabetes":{
        "medications":{
            "medicationsClasses":{
                "className":{
                    "associatedDrug":{
                        "name":"asprin",
                        "dose":"",
                        "strength":"500 mg"
                    },
                    "associatedDrug#2":{
                        "name":"somethingElse",
                        "dose":"",
                        "strength":"500 mg"
                    }
                },
                "className2":{
                    "associatedDrug":{
                        "name":"asprin",
                        "dose":"",
                        "strength":"500 mg"
                    },
                    "associatedDrug#2":{
                        "name":"somethingElse",
                        "dose":"",
                        "strength":"500 mg"
                    }
                }
            }
        },
        "labs":{
            "missing_field": "missing_value"
        }
    },
    "Asthma":{}
}}');

SELECT meddetails->'problems'->'Diabetes'->'medications'->'medicationsClasses'->'className'->'associatedDrug'->>'name'
FROM t;

僅供參考->返回 json 級別,可以進一步查詢。 ->>返回元素的文本,所以我相信你只會想要在鏈的末尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM