2013-10-23 69 views
-1

我有以下的JSON:解析JSON在Java中不工作

{ 
    "count" : "1567", 
    "program" : ["NDBC Meteorological\/Ocean", "International Partners"], 
    "owner" : ["NDBC", "Alaska Ocean Observing System"], 
    "station" : [{ 
      "id" : "00922", 
      "lat" : "30", 
      "lon" : "-90", 
      "name" : "OTN201 - 4800922" 
     } 
    ] 
} 

我只需要得到station信息像idlatlonname等,但我不能得到它的工作,這是我的代碼:

//////response_str is the json string/////// 

    JSONArray pages = new JSONArray(response_str); 
      for (int i = 0; i < pages.length(); ++i) { 
       JSONObject rec = pages.getJSONObject(i); 
       JSONObject jsonPage =rec.getJSONObject("station"); 
       String name= jsonPage.getString("name"); 
       System.out.println(name); 
      } 

任何幫助,將不勝感激,問候

+2

它怎麼不起作用?任何錯誤?例外是什麼? – Prateek

+0

一個例外,它打印日誌上的整個response_str貓 – wnieves19

+3

'jsonPage.getString(「name」);'可能會失敗,因爲'station'是一個對象數組,即使長度爲1,而不是單個對象。 。 – scrappedcola

回答

4

station相應地改變你的代碼是JSONArray,而不是JSONObject所以你需要首先從主的JSONObject得到JSONArray然後從JSONObject提取所有id,lat,lon,..。改變你的代碼:

JSONArray pages = new JSONArray(response_str); 
    for (int i = 0; i < pages.length(); ++i) { 
     JSONObject rec = pages.getJSONObject(i); 
     JSONArray jsonPage =rec.getJSONArray("station"); 
     // get JSONObject 
     JSONObject jsonstation =jsonPage.getJSONObject(0); 
     String name= jsonstation.getString("name"); 
     System.out.println(name); 
    } 
+0

謝謝我使用這段代碼的一部分工作...感謝它 – wnieves19

1

根是一個JSONObject不是JSONArray,它包含三個JSONArray,分別命名爲programm,stationownercount字段。你應該用JSON結構

+0

謝謝,這讓我知道了我在找什麼。 – wnieves19

0

你不需要外循環在所有

JSONObject jMain = new JSONObject(response_str); 
JSONArray jStationList =jMain.getJSONArray("station"); 
JSONObject jStation =jStationList.getJSONObject(0); 

String name= jsonstation.getString("name"); 

...等

0

你的問題是,你指的是源字符串作爲JSONArray,而不是JSONObject(外部的括號表示該數組)。以下是電臺的名稱。

JSONObject pages = new JSONObject(response_str); 

for (int i = 0; i < pages.length(); ++i) 
{ 
    JSONArray stationInfo =rec.getJSONArray("station"); 
    String name= stationInfo.getString("name"); 
    System.out.println(name); 
}