postgresql - Postgres - 遍历嵌套的、不一致的 Jsonb 数组并提取另一个键 =“X”的值
问题描述
我有一个 jsonb 对象,它看起来像:
{"result" : {
"address_components": [
{
"types": ["route"],
"long_name": "Church Road",
"short_name": "Church Rd"
},
{
"types": ["administrative_area_level_1","political"],
"long_name": "England",
"short_name": "England"
},
{
"types": ["country", "political"],
"long_name": "United Kingdom",
"short_name": "GB"
},
{
"types": [ "postal_code"],
"long_name": "TS18 1TW",
"short_name": "TS18 1TW"
}
]
}
我正在尝试编写一个 SELECT 查询,它通过types ->> 0
作为列名和long_name
作为值,但不是针对每个“类型”。因此,例如,如果我只想要“路线”、“邮政编码”和“国家”,结果可能如下所示:
route | postal_code | country
Church Road | TS18 1TW. | United Kingdom
我试过使用jsonb_array_elements
,但只返回第一个子数组。更复杂的是,address_components
json 并不总是包含一个route
数组,所以我不能只通过第一个数组并将其命名为“路由”。
当然,这还远未完成,但我不确定从这里去哪里。如何将“路线”设为列名,将“教堂路”设为值,以及“国家”和“邮政编码”(如果存在)?
解决方案
最好的方法可能是升级到 v12 然后使用 jsonpath 方法,例如。
jsonb_path_query_first(
full_response,
'$.result.address_components[*] ? (@.types[0]=="route").long_name'
)
推荐阅读
- java - 如何在java正则表达式中提取整个匹配组
- javascript - 如何在不渲染整个组件以进行实时提要的情况下无限发送请求
- ios - 当呼叫是视频时,在 CallKit 来电屏幕中显示视频按钮
- windows - 尝试搜索 Windows 更新时出错
- excel - 使用 VBA 代码提取单词表以分隔 excel 工作表
- javascript - 更新 sessionStorage 中对象的值
- c# - 必须使用 OUTPUT INTO 声明标量变量“@ID”
- python-3.x - 从 Google colab notebook 运行 java 命令
- python-3.x - 如何在对象检测 API 中使用 GCP 视觉训练模型
- html - SCSS 背景颜色未显示(angular2+ typescript)