【问题标题】:ruby how to add a hash element into an existing json arrayruby 如何将哈希元素添加到现有的 json 数组中
【发布时间】:2016-09-12 18:21:48
【问题描述】:

我的代码输出如下:

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

【问题讨论】:

    标签: arrays json ruby hash


    【解决方案1】:

    显示计算结果的 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#product?写起来更简单

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

    将数组转换为哈希

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

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

    【讨论】:

      【解决方案2】:
      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"}]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-03
        • 2017-04-12
        • 2021-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-22
        • 1970-01-01
        相关资源
        最近更新 更多