1

json-lib jar を使用して単純な json データを解析しようとしています。JSON データの形式は次のとおりです。

{"plantDetails":
    [{
        "common":"New Plant 1",
            "botanical":"",
            "light":"Mostly Shady",
            "price":0,
            "availDate":"10/25/2012",
            "indoor":false,
            "id":null
    },{
        "common":"New Plant 1",
            "botanical":"",
            "light":"Mostly Shady",
            "price":0,
            "availDate":"10/25/2012",
            "indoor":false,
            "id":null
    },{
        "common":"New Plant 1",
            "botanical":"",
            "light":"Mostly Shady",
            "price":0,
            "availDate":"10/25/2012",
            "indoor":false,
            "id":null
    }]
}

このために、以下のコードを使用しています。

try {
    net.sf.json.JSONObject jsonObject = net.sf.json.JSONObject.fromObject(jb.toString());               
    JSONArray arr = jsonObject.getJSONArray("plantDetails");
    //net.sf.json.JSONObject jsonObject1 = jsonObject.getJSONObject("plantDetails");
    Iterator iter = arr.iterator();
    while (iter.hasNext()) {
        JSONObject object = (JSONObject) iter.next();
        System.out.println(object.getString("common"));
        System.out.println(object.getString("botanical"));
    }
} catch (Exception e) {
    // crash and burn
    System.out.println(e.getMessage());
}
} catch (Exception e) {
    e.printStackTrace();
}

このコードは、複数の JSONObject (つまり、私の場合は 3 つ) がある場合に正常に機能します。残念ながら、JSON オブジェクトの数が 1 つのみの場合は機能しません。例外がスローされます。net.sf.json.JSONException: JSONObject["plantDetails"] is not a JSONArray.

複数の JSONObject が存在するかどうかなどのチェックを行う方法は?

これを解決する 1 つの方法は、上記の例外が 1 つの JSONObject のみの try/catch ブロックでスローされたら、次のコードを使用して、対応する値をフェッチすることです。

net.sf.json.JSONObject jsonObject1 = jsonObject.getJSONObject("plantDetails");

しかし、私はこのように行きたくありません:

1) 例外をキャッチしてそれを処理して Object 値をフェッチするよりも、同じことを達成するためのより良い方法があるかもしれません

2) 同じことを達成する最善の方法を知る必要がある

これについて教えてください。

よろしく、

4

0 に答える 0