2012-11-13 4 views
1

나는 한 줄짜리 JSON 파일을 가지고있다. 반복 할 때 가장 좋은 방법을 찾고있다.레일즈에서 JSON을 반복 할 때

{ 
"system": "Test", 
"Continents": [ 
    { 
     "Continent": { 
      "name": "Europe", 
      "location": "North" 
     }, 
     "Continent": { 
      "name": "Australia", 
      "location": "South" 
     }, 
     "Continent": { 
      "name": "Asia", 
      "location": "North" 
     } 
    } 
    ] 
} 

시작하려면, 나는 성공적으로 전체 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 

Continents 섹션을 통해 루프하고 관련 기록을 당깁니다. 목표는 목록/표/디스플레이의 정보를 반복하여 출력하는 것입니다.

도움을 주셔서 감사합니다. 내가 명확히 할 수 있는지 알려주세요.

답변

4

JSON.parse는 루비 해시로 JSON 문자열을 변환합니다, 그래서 당신은 어떤 다른 마찬가지로 당신은 그것으로 작업 할 수 있습니다

json = JSON.parse(line) 
json["Continents"].each do |continent| 
    # do something 
end 

그러나, 데이터와 별도의 문제가 있습니다. 당신은 실제로 당신이 게시 된 데이터 JSON.parse를 사용하는 경우,이 같은 결과를 바람해야

{"system"=>"Test", "Continents"=>[{"Continent"=>{"name"=>"Asia", "location"=>"North"}}]} 
당신은 하나의 대륙이 알 수

- 루비는 해시 키 당 하나 개의 값을 지원하기 때문에 즉, 그래서 JSON의 각 Continent에 대해 Continent 키가 덮어 쓰여지고 있습니다. 다른 형식의 데이터를 포맷해야 할 수도 있습니다.

+0

큰 도움이되었습니다. - 감사합니다. 내 JSON 파일을 순조롭게 반복 할 수 있으므로 키를 놓는 것에 대한 노트를 따르지 않습니다. 아직 그 문제에 부딪치지 않았을 수도 있습니다. 도움을 주셔서 감사합니다 @ BaronVonBraun – matthewvb

관련 문제