如何使用键作为数组值创建json

时间:2018-10-11 11:20:02

标签: arrays json ruby hash

例如,我有一个array = [zoo, foo, bar, ...]

我需要使用哈希创建json,其中keys是数组的值,而hash的值是另一个哈希 像这样:

"model_field": {
   "zoo": {
      "name": "zoo",
      "key2": "value2",
      "key3": "value3"
   },
   "foo": {
      "name": "foo",
      "key2": "value2",
      "key3": "value3"
   },
  ...
}

我试图做这样的事情

def json
  render json: {model_field: {array.each do |x|
      {x => {name: x, key2: "value2", key3: "value3"}
      }
    end
    }
  }
end

但是我被困住了。谁能帮我吗?

1 个答案:

答案 0 :(得分:0)

each返回您迭代的对象,无论您在循环中进行了什么操作。

%w[zoo foo bar].each { |x|  } # => ["zoo", "foo", "bar"]

您可以做的是each_with_object将哈希传递给每个迭代并填充它。在最后一次迭代之后,这将返回您传入的对象:

array = %w[zoo foo bar]

output = {
  model_field: array.each_with_object({}) do |x, hash|
    hash[x] = { name: x, key2: rand(1..100) }
  end
}
# => {
#      :model_field=>{
#        "zoo"=>{:name=>"zoo", :key2=>25},
#        "foo"=>{:name=>"foo", :key2=>83},
#        "bar"=>{:name=>"bar", :key2=>98}
#      }
#    }