所以我有一个 json(在文本字段中),我正在使用 postgresql,我需要查询该字段,但它嵌套得有点深。格式如下:
[
{
"name":"First Things",
"items":[
{
"name":"Foo Bar Item 1",
"price":"10.00"
},
{
"name":"Foo Item 2",
"price":"20.00"
}
]
},
{
"name":"Second Things",
"items": [
{
"name":"Bar Item 3",
"price":"15.00"
}
]
}
]
我需要查询 items
节点内的 name
。我尝试了一些查询但无济于事,例如:
.where('this_json::JSON @> [{"items": [{"name": ?}]}]', "%#{name}%")
。我应该怎么去这里?
我可以查询普通的 JSON 格式,如 this_json::JSON -> 'key' = ?
但需要这方面的帮助。
最佳答案
这里需要用到json_array_elements()
两次,因为您的顶级文档包含 json 数组,所以 items
键包含子文档数组。示例 psql
查询可能如下所示:
SELECT
item->>'name' AS item_name,
item->>'price' AS item_price
FROM t,
json_array_elements(t.v) js_val,
json_array_elements(js_val->'items') item;
其中 t
- 是您的表的名称,v
- 您的 JSON
列的名称。
关于ruby-on-rails - Rails PSQL 查询嵌套数组和对象的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35987314/