Rails PSQL查询嵌套数组和对象的JSON

时间:2016-03-14 12:15:52

标签: ruby-on-rails json postgresql psql

所以我有一个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"
      }
    ]
  }
]

我需要在name节点内查询items。我尝试了一些查询,但没有用,比如: .where('this_json::JSON @> [{"items": [{"name": ?}]}]', "%#{name}%")。我该怎么去这里?

我可以像this_json::JSON -> 'key' = ?那样查询普通的JSON格式,但需要这方面的帮助。

1 个答案:

答案 0 :(得分:0)

在这里,您需要使用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列的名称。