![](/img/trans.png)
[英]Remove specific key and value from nested json array in PostgreSQL column
[英]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.