ruby-on-rails - Rails PSQL 查询嵌套数组和对象的 JSON

标签 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"
      }
    ]
  }
]

我需要查询 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/

相关文章:

python - 使用 sqlalchemy 创建一个 db.Sequence

javascript - Bookshelf.js与json属性中的外键的关系

ruby-on-rails - 在 Rails 3 中放置全局变量的位置

php - 将 mysql 加载到 NVD3 的 json

javascript - Dialogflow html/js 卡 json 值 v1

python - 我可以用 Python 替换 JSON 键中的部分字符串吗?

database - 删除其他用户正在访问的数据库?

ruby-on-rails - 无效的配置选项 `:provider'

ruby-on-rails - 安装 rails 问题

ruby-on-rails - 在 Rails 中设置当前 Time.zone?