【问题标题】:Ruby converting array to hash object to jsonRuby将数组转换为散列对象到json
【发布时间】:2017-01-18 03:36:45
【问题描述】:

我有一个动态创建的数组,如下所示:

 ids =  [111,333,888]

我正在尝试创建一个最终看起来像这样的 json 对象:

{
    "cars": [{
        "id": "111"
    }, {
        "id": "333"

    }, {
        "id": "888"
    }]
}

所以我在 repl 中测试时尝试了这个:

cars_object.merge!(cars: [id: ids]).to_json

那行不通。我不知道如何做到这一点的最佳方法。我需要遍历数组吗?

【问题讨论】:

    标签: ruby-on-rails arrays json ruby object


    【解决方案1】:

    我建议你使用Array#product的方法。

    { "cars": ["id"].product(ids).map { |k,v| { k=>v } } }
      #=> {:cars=>[{"id"=>111}, {"id"=>333}, {"id"=>888}]} 
    

    { "cars": ["id"].product(ids).map { |a| [a].to_h } }
      #=> {:cars=>[{"id"=>111}, {"id"=>333}, {"id"=>888}]} 
    

    然后申请to_json

    【讨论】:

      【解决方案2】:

      因此,您是否想将您的 id 转换为字符串还不是很清楚。我假设不是,但如果您想将它们作为字符串,只需在地图中的 i 调用中添加 .to_s

      所以,从输出向后工作,我看到你有一个带有一个键的散列,值是键 id 的散列数组。由此,我制作了一个等效的 ruby​​ 结构,hash => 哈希数组。

      require 'json'
      { cars: [111,333,888].map do |i| 
          { id: i } 
        end 
      }.to_json
       => "{\"cars\":[{\"id\":111},{\"id\":333},{\"id\":888}]}"
      

      如果你在 Rails 中,则不需要 json。

      使用 ruby​​,由于一切都是对象,因此您可以有效地将其变成单线。由于缺乏上下文,我不能说这是否有意义。

      如果您在一个对象中,您可能希望将 id 哈希的构建分解为一个新方法并调用它。如果它是 Rails 并且 id 实际上处于您正在抓取的 ActiveRecord 关系中,您可以执行以下操作:

      { users: User.select(:id).first(3) }.to_json
        User Load (0.3ms)  SELECT  `users`.`id` FROM `users`  ORDER BY `users`.`id` ASC LIMIT 3
      => "{\"users\":[{\"id\":1},{\"id\":2},{\"id\":3}]}"
      

      显然不适合您的情况,但您应该能够从那里运行。

      【讨论】:

        【解决方案3】:

        也许这会有所帮助。

        您可以像这样创建该哈希。

        car_hash = {:cars => (['id']*(ids.size)).zip(ids).map {|k, v| { k => v} }}
        

        您可以像这样将其转换为 json。

        require 'json'
        car_hash.to_json
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-04-16
          • 2011-07-07
          • 2021-10-18
          • 2018-02-10
          • 2015-01-21
          • 2012-07-21
          • 2020-10-02
          相关资源
          最近更新 更多