ruby如何将hash元素添加到现有的json数组中



我有输出以下内容的代码:

car_id = ["123"]
model = [:model].product(car_id).map { |k,v| {k=>v} }
model = [{:model=>"123"}]

然后,我想在json中添加一个新的散列:make,如下所示:

model_with_make = [{:model=>"123", :make => "acura"}]

我该怎么做?

不幸的是,我找到的每一个解决方案都会产生以下结果:[{:model=>"123"}, {:make => "acura"}],这不是我想要的。

显示计算结果的Ruby约定

我想你的意思是

model = [:model].product(car_id).map { |k,v| {k=>v} }

生成一个包含单个哈希的数组:

[{:model=>"123"}]

并且您当时没有执行以下语句:

model = [{:model=>"123"}]

这将覆盖前一语句中model的值,从而使前一语句变得毫无意义。如果是这样的话,通常的编写方式如下。

model = [:model].product(car_id).map { |k,v| {k=>v} }
  #=> [{:model=>"123"}]

计算阵列

接下来,

arr = [:model].product(car_id)
  #=> [[:model, "123"]]

但是,当数组[:model]car_id都包含单个元素时,为什么要使用Array#产品呢?只写更简单

arr = [[:model, car_id.first]]
  #=> [[:model, "123"]]

将数组转换为哈希

由于arr只包含一个元素,所以map ping它没有多大意义;只需将其转换为哈希:

Hash[arr]
  #=> {:model=>"123"} 

或者(对于Ruby 1.9+版本(:

arr.to_h
  #=> {:model=>"123"} 

将键值对添加到哈希

如果您希望将键值对:make => "acura"添加到

h = {:model=>"123"} 

你可以简单地写

h[:make] = "acura"
  #=> "acura" 
h #=> {:model=>"123", :make=>"acura"}  

或者,在一行中,

(h[:make] = "acura") && h
  #=> {:model=>"123", :make=>"acura"}

包装

把这些放在一起,你可以写

h = [[:model, car_id.first]].to_h
  #=> {:model=>"123"} 
(h[:make] = "acura") && h
  #=> {:model=>"123", :make=>"acura"} 
model = [{:model=>"123"}]
model_with_make = model.map { |m| m.merge(make: 'acura') }
#⇒ [{:model=>"123", :make => "acura"}]

如果您担心数组model中只有一个元素,您可以就地修改它:

model.first.merge!(make: 'acura')
model
#⇒ [{:model=>"123", :make => "acura"}]

最新更新