2013-04-03 6 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

это работает ...! thank u very much –

+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() ... просто не могу этого сделать.

Так что просто проверьте нуль, затем решите, что делать.

Если вы хотите поставить нулевой или «» в карте, если поле/атрибут объекта JSON является пустым вы можете сделать что-то вроде того, что Навин имеет или:

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

или (если вы хотите нулевой вместо этого)

map.put("atasan", c.has("atasan") ? c.get("atasan").toString() : null); 
Смежные вопросы