解析JSON数据时处理空值

时间:2013-04-03 02:55:51

标签: java android json event-handling

我想使用JSON导入数据,但有些数据为null,如下所示:

[
    {
        "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();
}

我希望有人能帮助我解决这个问题,谢谢。

3 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

如果存在空值,则取决于您期望发生的事情。但了解正在发生的事情也很重要。当您调用c.get(“atasan”)并且它返回null时,您无法继续.toString()调用。这与说null.toString()...就是不能这样做。

所以只需检查null然后决定该怎么做。

如果要将json对象中的字段/属性设为null,则要将null或“”放入映射中,您可以执行类似Naveen的操作或:

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

或(如果你想要null)

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

答案 2 :(得分:0)

您想访问可能存在或不存在的参数,但这不应终止代码。因此,我们需要使用if和else语句。

在if语句中,可以使用has()来检查参数是否存在。
如果has()不起作用,则可以使用isNULL()或类似的方法尝试进行空检查
if(c!=null&&c.get("kode_agen")!=null) map.put("kode_agen",c.get("kode_agen").toString());

检查值是否为空。

在某些情况下,JSON会像这样的代码存储值

"kode_agen":null

那么您需要忽略此类值,因为这可能会引发错误(如null值) 为此,您可以编写,

if (!c.get("kode_agen").toString().equalsIgnoreCase("null")

因此,可以说,if和else中的条件完全取决于JSON

JSONObject c = jsonArray.getJSONObject(i);
        HashMap<String, String> map = new HashMap<String, String>();
       if(c.has("atasan"))
        map.put("atasan", c.get("atasan").toString());
       else
        map.put("atasan","null");
       if(c.has("kode_agen"))
        map.put("kode_agen", c.get("kode_agen").toString());
       else
        map.put("kode_agen","null");
       if(c.has("jenis"))
        map.put("jenis", c.get("jenis").toString());
       else
        map.put("jenis","null");
       if(c.has("no_aaji"))
        map.put("no_aaji", c.get("no_aaji").toString());
       else
        map.put("no_aaji","null");
       if(c.has("nama_agen"))
        map.put("nama_agen", c.get("nama_agen").toString());
       else
        map.put("nama_agen","null");        
        AgenList.add(map);