sql - 如何根据 PostgreSQL 中 JSON 中的另一个字符串从 JSON 中查询一个字符串?
问题描述
我的 PostgreSQL 数据库中的 MyTable.MyField 包含以下(简化的)JSON 块:
{
"base": {
"fields": [
{
"fieldid": "c12f",
"fieldname": "sizes",
"choices": [
{
"choiceid": "2db3",
"size": "small"
},
{
"choiceid": "241f",
"size": "medium"
},
{
"choiceid": "3f52",
"size": "large"
}
],
"answer": "241f"
}
]
}
}
请问如何使用 的值从数组answer
中提取所选内容(即在本例中为“中”)?size
choices
(注意:我已经尝试过。有关此问题的 TLDR 版本,请参阅Trying to construction PostgreSQL Query to extract from JSON a text value in an object, in an array, in an object, in an array, in an object。)
谢谢你。
解决方案
您可以json_array_elements
在横向连接中使用,然后只需查询您要查找的字段:
SELECT
field -> 'fieldid' AS id,
choice -> 'size' AS size
FROM
my_table,
json_array_elements(json_column -> 'base' -> 'fields') field,
json_array_elements(field -> 'choices') choice
WHERE
field ->> 'answer' = choice ->> 'choiceid'
推荐阅读
- android - 动态表渲染表行内容在android中存在问题
- r - 如何从R中的句子中提取特定的数据值?
- django - 为具有员工用户状态的用户创建具有其他字段的单独模型?
- spring-boot - 如果构造函数有参数,如何创建 bean 和自动装配?
- ios - UICollectionView + Firestore - 加载缓慢
- algorithm - 在 Spring Boot 中使用 Rest API 服务计算 Circle 的面积
- vuejs2 - cypress 如何在 CRUD 测试中获取插入行的 ID?
- php - 如何发送查询以获取两个表的总和?
- java - 如何在模块中执行所有junit5测试之前和之后编码一次?
- asp.net-core - IDistributedCache SQL Server 删除过期记录