Ruby on rails 在Ruby 2.0中使用特定键和值从数组构建JSON对象

Ruby on rails 在Ruby 2.0中使用特定键和值从数组构建JSON对象,ruby-on-rails,ruby,json,ruby-on-rails-4,Ruby On Rails,Ruby,Json,Ruby On Rails 4,我在从父子关系构建json对象时遇到了一些困难。我有一个有很多孩子的父母模型 我正在尝试创建一个JSON对象,如下所示: { parent_1.name: { parent_1.child.age, parent_1.child.height}, parent_1.name: { child_2.age, child_2.height}, parent_2.name: ...... } 我帮了很多忙,但我不能完全理解 我试过这个: Parent.all.inject({}) { |hsh, p

我在从父子关系构建json对象时遇到了一些困难。我有一个有很多孩子的父母模型

我正在尝试创建一个JSON对象,如下所示:

{ parent_1.name: { parent_1.child.age, parent_1.child.height}, parent_1.name: { child_2.age, child_2.height}, parent_2.name: ...... }
我帮了很多忙,但我不能完全理解

我试过这个:

Parent.all.inject({}) { |hsh, p| hsh[p.name] = { p.name => p.children.inject({}) { |h,v| h[v] = {age: v.age, height: v.height}} }}
这真的很接近(但看起来很可怕)。然而,我只有一个父母的孩子-我需要所有的父母和孩子。我只需要孩子们的身高和年龄。输出如下(我排除了对json的转换):

它应该是这样的:

{"BarryWhite"=>{:age=>"12", :height=>"45cm"}, {:age => "34", :height => "108cm"}, "AndyMurray"=>{:age=>"14", :height=>"125cm"}}    

如何让它输出正确格式的json。

首先,您需要的json格式有点不正确

我假设子元素应该是一个散列数组,如:

{
  'BarryWhite' => [
    { :age => '12', :height => '45cm'  },
    { :age => '34', :height => '108cm' }
  ]
  'AndyMurray' => [
    { :age => '14', :height => '125cm' }
  ]
}
为此,您不需要内部#注入,因为您不需要散列,而需要数组

另外,您对哈希的使用有点不正确#inject通过将最后执行的语句传递给循环来构建哈希。最后执行的语句是一个赋值,它只返回变量“p”的当前值。您应该始终返回整个“hsh”

以下是工作解决方案:

Parent.all.inject({}) do |hsh, p|
  hsh[p.name] = p.children.map { |c| {age: c.age, height: c.height} }
  hsh
end

首先,您需要的JSON格式有点不正确

我假设子元素应该是一个散列数组,如:

{
  'BarryWhite' => [
    { :age => '12', :height => '45cm'  },
    { :age => '34', :height => '108cm' }
  ]
  'AndyMurray' => [
    { :age => '14', :height => '125cm' }
  ]
}
为此,您不需要内部#注入,因为您不需要散列,而需要数组

另外,您对哈希的使用有点不正确#inject通过将最后执行的语句传递给循环来构建哈希。最后执行的语句是一个赋值,它只返回变量“p”的当前值。您应该始终返回整个“hsh”

以下是工作解决方案:

Parent.all.inject({}) do |hsh, p|
  hsh[p.name] = p.children.map { |c| {age: c.age, height: c.height} }
  hsh
end
我是这样做的:

1) 每个模型都有一个to_json方法

2) 呈现时,呈现json:@items.collect(&:to_json)

我不知道为什么在调用array.to_json时,它不会在子对象上自动调用_json。

我是这样做的:

1) 每个模型都有一个to_json方法

2) 呈现时,呈现json:@items.collect(&:to_json)


我不知道为什么在调用array.to_json时,它不会在子对象上自动调用_json。

关于格式的观点很好。我忘了把它放进去。。谢谢,一切都安排好了。关于格式,我有一个很好的观点。我忘了把它放进去。。谢谢,一切都安排好了。s