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

时间:2016-09-12 18:21:49

标签: arrays json ruby hash

我的代码输出如下:

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"}]这不是我想要的。

2 个答案:

答案 0 :(得分:2)

用于显示计算结果的Ruby约定

我认为你的意思是

argparse

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

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]都包含单个元素时,为什么要使用Array#product?只写

更简单
car_id

将数组转换为哈希

由于arr = [[:model, car_id.first]] #=> [[:model, "123"]] 只包含一个元素,因此arr ping它并不重要;只需将其转换为哈希:

map

或(对于Ruby版本1.9 +):

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

将一个键值对添加到哈希

如果您希望将键值对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"}

答案 1 :(得分:1)

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