代码之家  ›  专栏  ›  技术社区  ›  Tony

如何在Ruby中构建这个JSON对象?

  •  1
  • Tony  · 技术社区  · 15 年前

    我需要在JSON中引入一个Ruby对象数组。我需要按ID在JSON对象中找到这个项,所以我认为ID最好是每个对象的键。这种结构对我来说最有意义:

    {
        "1":   {"attr1": "val1", "attr2": "val2"},
        "2":   {"attr1": "val1", "attr2": "val2"},
        "3":   {"attr1": "val1", "attr2": "val2"}
    }
    

    这样我就可以很容易地调用JSON对象,比如 console.log(json_obj[id].attr1)

    问题是我不太确定如何在Ruby中构建它。据我所知:

    # in ruby
    @book_types = []
    BookType.all.each do |bt|
       @book_types << {bt.id => {:attr => bt.attr}}
    end
    @book_types = @book_types.to_json
    
    // In JS
    var bookTypes = JSON.parse('<%=raw @book_types %>');
    

    2个问题:如何在Ruby中构建这个?有没有更好的方法来完成我正在做的事情?

    还需要注意的是,我正在Rails框架上构建它

    谢谢!

    1 回复  |  直到 15 年前
        1
  •  10
  •   Jordan Running    15 年前

    假设BookType是ActiveRecord类,您只需执行以下操作:

    BookType.all(:select => "attr1, attr2").to_json
    

    …在哪里 "attr1, attr2" 是要包含在JSON中的属性列表。

    如果你想要 id s作为键,您可以执行以下操作:

    BookType.all.inject({}) { |hsh, bt|
      hsh[bt.id] = { "attr1" => bt.attr1, "attr2" => bt.attr2 }
      hsh
    }.to_json