2013-04-03 171 views
1

我想導入使用JSON數據時,處理空值,但一些數據爲空,如下所示:解析JSON數據

[ 
    { 
     "atasan": "name ", 
     "kode_agen": "number", 
     "jenis": "Regional", 
     "no_aaji": "number* ", 
     "nama_agen": "name" 
    }, 
    { 
     "atasan": "name ", 
     "kode_agen": "number" 
    }, 
    { 
     "atasan": "name ", 
     "kode_agen": "number", 
     "jenis": "Agency", 
     "nama_agen": "name" 
    } 
] 

我的問題是什麼是處理這種空數據的正確方法?這是我的源代碼:

try { 
    JSONParser j = new JSONParser(); 
    JSONArray jsonArray = j.takeJson(url); 

    for (int i = 0; i < jsonArray.length(); i++) { 

     JSONObject c = jsonArray.getJSONObject(i); 
     HashMap<String, String> map = new HashMap<String, String>(); 

     map.put("atasan", c.get("atasan").toString()); 
     map.put("kode_agen", c.get("kode_agen").toString()); 
     map.put("jenis", c.get("jenis").toString()); 
     map.put("no_aaji", c.get("no_aaji").toString()); 
     map.put("nama_agen", c.get("nama_agen").toString()); 
     AgenList.add(map); 
    } 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 

我希望有人能幫我解決這個問題,謝謝。

回答

2

你可以這樣做:

JSONObject c = jsonArray.getJSONObject(i); 

if (c.has("atasan")) 
    map.put("atasan", c.get("atasan").toString()); 
if (c.has("nama_agen")) 
    map.put("nama_agen", c.get("nama_agen").toString()); 
+0

它的工作原理...!非常感謝你 –

+0

爲了保持JSON結構的一致性,我建議放置JSONObject.Null而不是從對象中跳過字段。 – karmanaut

+0

只是爲了解釋一下爲什麼這個方法可行,請考慮: 'map.put(「kode_agen」,c.get(「kode_agen」)。toString());' 如果'c.get(「 kode_agen「)'返回null,那麼您將得到一個NullPointerException異常。在使用之前總是檢查,因此'has()。' – Pedantic

0

這取決於你期待什麼有發生,如果有一個空值。但瞭解發生的事情也很重要。當你調用c.get(「atasan」)並且它返回null時,你不能繼續進行.toString()調用。這與說null.toString()...一樣不能這樣做。

因此,只需檢查null,然後決定要做什麼。

如果你想要把空或「」到地圖中,如果在JSON對象中字段/屬性爲空,你可以做這樣的事情是什麼納文已經或:

map.put("atasan", c.has("atasan") ? c.get("atasan").toString() : ""); 

或者(如果你想空相反)

map.put("atasan", c.has("atasan") ? c.get("atasan").toString() : null);