1

我想用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();
}

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

4

3 回答 3

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());
于 2013-04-03T03:02:52.400 回答
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);
于 2013-04-03T03:13:00.777 回答
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

,你需要忽略这种值,因为这可能会抛出一个错误作为你可以写的空值,

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);
于 2020-07-28T07:21:25.110 回答