2012-09-06 3 views
1

this을 사용하여 간단한 JSON 파서를 만들었습니다. 내가하고 싶은 것은 Google지도 API를 사용하여 비즈니스의 이름과 위도/경도를 파싱하는 것입니다.하지만 제대로 파싱 할 수없는 것 같습니다. JSON 결과JSON 파서 노드 건너 뛰기?

예 :

"results" : [ 
    { 
    "geometry" : { 
     "location" : { 
      "lat" : 41.8881090, 
      "lng" : -87.6308430 
     } 
    }, 
    "name" : "American Bar Association", 
    }, 
    { 
    "geometry" : { 
     "location" : { 
      "lat" : 41.8721230, 
      "lng" : -87.6294680 
     } 
    }, 
    "name" : "Bar Louie", 

    } ], "status" : "OK"} 

나는 다른 세부 사항 중 일부는 예를 단축에 관심이 임하지만, 여기에 내 코드입니다 꺼내서 :

  JSONParser jParse = new JSONParser(); 
      JSONObject json = jParse.getJSON(url); 

      try 
      { 
       JSONArray contacts = json.getJSONArray("results"); //Parent Node 
       for(int i = 0; i < 5; i++)//Loop through first 5 results results    
       { 
        JSONObject c = contacts.getJSONObject(i); 
        name = c.getString("name");//Gets name field 

        //get lat from location which is a sub object of geometry      
        lat = Float.valueOf (contacts.getJSONObject(i).getJSONObject("geometry").getJSONObject("location").getString("lat")); 
       } 
      } catch (JSONException e) { e.printStackTrace(); } 

내가 실행 그것은 첫 번째 결과를 잘 얻었지만 정확한 이름과 위도를 얻었지만 두 번째 결과로 이동하는 대신 i의 마지막 결과로 이동하여 루프의 나머지 부분을 인쇄합니다.

  • 루프 1 출력 : 결과 # 1 //이 좋은
  • 루프 2 출력 : 결과 # 5 // 어떻게 든 우리가 건너 내가 얻을 5 개 결과를 통해 I 루프를하는 경우 설명하기 어려운, 내가 무엇을 의미하는 것은 # 5 대신을 결과 # 2
  • 루프 3 출력 방법 : 결과 #을 이제 그냥 루프
  • 루프 4 출력의 나머지 부분을 통해 인쇄 # 5 각 시간을 유지 // 5 : 결과 # 5
  • 루프 5 출력 : 결과 # 5

for 루프를 무시하고 마지막 결과를 얻는 방법을 모르겠습니다. 인스턴트 메시지를 사용하여 결과를 인쇄하고 짧은 스 니펫으로 생략했습니다.

(그 중요한 경우 내가, 내가 별도의 스레드를 통해이를 실행하고 토스트 메시지를 표시 핸들러를 사용하고주의 할 것이다)

난 정말 자바 위대한 아니에요 그리고 그것은 처음 I JSON을 사용하여 내가 말했을 수도있는 어리 석음을 아끼지 않았습니다. 어떤 도움이라도 대단히 감사합니다. :)

답변

0

을 CONCAT 안 사전입니다 JSON과 함께 작업을했다. 루프를 통해 매번 name 변수를 다시 사용했기 때문에 핸들러가 시작되어 루프가 이미 끝난 첫 번째 메시지가 표시되고 이름에 마지막 값을 할당했기 때문에 생각합니다. 그래서 다른 네 개의 핸들러 요청이 마침내 실행되었을 때 같은 값을 4 번 인쇄했습니다.

0

안녕하세요, 귀하의 5 루프를 이해할 수 없습니다. 말씀하신대로 3 루프 만해야합니다. JSON 파일로 작업 할 때도 비슷한 문제가있었습니다. (연락처 - 3 개체를 채울 예정) 나는 당신이

JSONArray contacts = json.getJSONArray("results"); 

내 문제는 내가 내가 배열에 원하는 요소를 가지고 생각이었다 후이 객체의 실수를 인쇄하는 것이 좋습니다 실제로 그러나 나는이었다 언어의 일부 (예를 들어 기하 개체에 대한) 다른 것은

을 가진 나는 결과가 어쩌면 당신은 내가 내 자신의 문제에 대답 결국 getJSONObject

contacts.getJSONObject(i).getJSONObject("geometry").getJSONObject("location").getString("lat") 
+0

코드가 변경되었습니다. 5 루프는 코드 루프에서도 5를 사용해야하는 예입니다. 죄송합니다. –

+0

contacts.lenght 또는 그와 비슷한 것을 사용해야합니다. 하드 코딩을 피하십시오. – andres83

+0

.length()를 사용합니다. 테스트 목적으로 만 5 회 반복하고 싶습니다. 불행히도이 문제를 일으키는 것이 무엇인지 아직 파악하지 못했습니다. –