在Rails中遍历JSON

mat*_*wvb 1 json ruby-on-rails-3

我有一个单行JSON文件,我试图对其进行迭代,并寻找遍历它的最佳方法。

爆炸后,看起来像:

{
 "system": "Test",
 "Continents": [
    {
        "Continent": {
            "name": "Europe",
            "location": "North"
         },
        "Continent": {
            "name": "Australia",
            "location": "South"
         },
        "Continent": {
            "name": "Asia",
            "location": "North"
         }
     }  
  ]
}
Run Code Online (Sandbox Code Playgroud)

首先,我将使用以下内容加载JSON,这将成功加载完整的JSON。

File.open(json_file, 'r') do |file|

    file.each do |line|            

      JSON.parse(line).each do |item|

        ## CODE TO ITERATE HERE

      end        
    end
 end
Run Code Online (Sandbox Code Playgroud)

我不确定该怎么做才能遍历该Continents部分并提取关联的记录。目标是循环浏览并在列表/表/显示中输出信息。

感谢您的帮助-让我知道是否可以澄清。

Bar*_*aun 5

JSON.parse 会将您的JSON字符串转换为Ruby哈希,因此您可以像使用其他任何字符串一样使用它:

json = JSON.parse(line)
json["Continents"].each do |continent|
  # do something
end
Run Code Online (Sandbox Code Playgroud)

但是,您的数据还有一个单独的问题。如果您实际使用JSON.parse发布的数据,那么应该得到如下结果:

{"system"=>"Test", "Continents"=>[{"Continent"=>{"name"=>"Asia", "location"=>"North"}}]}
Run Code Online (Sandbox Code Playgroud)

您会注意到只有一个大陆-这是因为Ruby哈希每个键仅支持一个值,因此JSON中的Continent每个键都覆盖了该键Continent。您可能需要查看另一种格式化数据的方式。