要素がJSONArrayかJSONObjectかを確認する方法。チェックするコードを書いて、
if(jsonObject.getJSONObject("Category").getClass().isArray()) {
} else {
}
この場合、要素「category」がJSONObjectの場合は正常に動作しますが、配列が含まれている場合は例外がスローされます。JSONArrayはJSONObjectに変換できません。助けてください。ありがとう。
はい、これは、getJSONObject("category")
がString
をJSONObjectに変換しようとするためです。これにより、JSONException
がスローされます。次のことを行う必要があります。
次のコマンドを使用して、そのオブジェクトがJSONObject
かどうかを確認します。
JSONObject category=jsonObject.optJSONObject("Category");
JSONObject
オブジェクトがjsonオブジェクトでない場合は、null
またはcategory
を返します。次に、以下を実行します。
JSONArray categories;
if(category == null)
categories=jsonObject.optJSONArray("Category");
JSONArray
または有効なJSONArray
でない場合はnullを返します。
あなたはあなたの答えを得ましたが、それでも他のユーザーを助けることができます...
if (Law.get("LawSet") instanceof JSONObject)
{
JSONObject Lawset = Law.getJSONObject("LawSet");
}
else if (Law.get("LawSet") instanceof JSONArray)
{
JSONArray Lawset = Law.getJSONArray("LawSet");
}
ここでLaw
は他のJSONObject
で、LawSet
はJSONObject or JSONArray
として検索するキーです。
String data = "{ ... }";
Object json = new JSONTokener(data).nextValue();
if (json instanceof JSONObject)
//you have an object
else if (json instanceof JSONArray)
//you have an array
tokenizerはより多くのタイプを返すことができます: http://developer.Android.com/reference/org/json/JSONTokener.html#nextValue()
if (element instanceof JSONObject) {
Map<String, Object> map = json2Java.getMap(element
.toString());
if (logger.isDebugEnabled()) {
logger.debug("Key=" + key + " JSONObject, Values="
+ element);
}
for (Entry<String, Object> entry : map.entrySet()) {
if (logger.isDebugEnabled()) {
logger.debug(entry.getKey() + "/"
+ entry.getValue());
}
jsonMap.put(entry.getKey(), entry.getValue());
}
}
instanceof
を使用して、取得した結果のタイプを確認できます。その後、必要に応じて処理できます。