web-dev-qa-db-ja.com

JSON Javaチェック要素はJSONArrayまたはJSONObjectです

要素がJSONArrayかJSONObjectかを確認する方法。チェックするコードを書いて、

if(jsonObject.getJSONObject("Category").getClass().isArray()) {

} else {

}

この場合、要素「category」がJSONObjectの場合は正常に動作しますが、配列が含まれている場合は例外がスローされます。JSONArrayはJSONObjectに変換できません。助けてください。ありがとう。

20
Neetesh

はい、これは、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を返します。

26
Ovidiu Latcu

あなたはあなたの答えを得ましたが、それでも他のユーザーを助けることができます...

 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で、LawSetJSONObject or JSONArrayとして検索するキーです。

17
Vikas Gupta
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()

9
neworld
           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());
                }
            }
0
Anand

instanceofを使用して、取得した結果のタイプを確認できます。その後、必要に応じて処理できます。

0
Dimitris Makris