【问题标题】:Json.jbuilder merge 2 json data and send it to one keyJson.jbuilder 合并2个json数据,一键发送
【发布时间】:2017-12-07 23:33:13
【问题描述】:

我正在使用 rails 5,我正在使用 jbuilder 发送 json。我面临的问题是我想合并 2 个表 json 并将其发送到同一个键..

我的 json.jbuilder 看起来像这样

json.children env.sites do |site|
  json.nodeId "site_#{site.id}"
  json.type "site"
  json.extract! site,:id, :key, :name
  json.children site.networks do |network|
    json.nodeId "network_#{network.id}"
    json.type "network"
    json.extract! network,:id, :name
    json.children network.vlans do |vlan|
      json.type "vlan"
      json.extract! vlan,:id, :name
    end
  end
  json.children site.instances do |instance|
    json.type "host"
    json.extract! instance,:id, :name
    json.content do
      json.cpu instance.cpu
    end
  end
end

我在这里面临的问题是我想将 site.networks 和 site.instaces 合并到同一个键中。我将如何实现这一点..??

【问题讨论】:

  • 同一个键?当前和预期的 json 输出是什么?
  • 当前输出是用 site.instances 数据覆盖 children 键,预计它应该合并 site.networks 和 site.instances json
  • 它没有多大帮助。你只是不能合并任何东西......你的许多键都是一样的,你能发布预期的 json 输出吗?什么需要数组,什么需要散列?

标签: ruby-on-rails json hash ruby-on-rails-5


【解决方案1】:

您可以使用json.array!

试试这个,

json.children env.sites do |site|
  json.nodeId "site_#{site.id}"
  json.type "site"
  json.extract! site,:id, :key, :name
  json.children do
    json.array!(site.networks) do |network|
      json.nodeId "network_#{network.id}"
      json.type "network"
      json.extract! network,:id, :name
      json.children network.vlans do |vlan|
        json.type "vlan"
        json.extract! vlan,:id, :name
      end
    end
    json.array!(site.instances) do |instance|
      json.type "host"
      json.extract! instance,:id, :name
      json.content do
        json.cpu instance.cpu
      end
    end
  end
end

【讨论】:

  • 该解决方案有效,但在我的情况下,额外的要求是缓存。在上述情况下,我可以将 'site.networks' 数组缓存为 # json.cache_collection! site.networks, key: 'site_network_array' 做 |network| ........结束
猜你喜欢
  • 1970-01-01
  • 2013-04-24
  • 2015-11-18
  • 2021-04-25
  • 2017-06-02
  • 1970-01-01
  • 2021-12-17
  • 2014-03-05
  • 2020-01-10
相关资源
最近更新 更多