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) 同じことを達成する最善の方法を知る必要がある
これについて教えてください。
よろしく、