如何检查给定对象是 JSON 字符串中的对象还是数组

2022-09-02 05:04:54

我从网站获取 JSON 字符串。我有看起来像这样的数据(JSON数组)

 myconf= {URL:[blah,blah]}

但有时此数据可以是(JSON对象)

 myconf= {URL:{try}}

也可以是空的

 myconf= {}    

我想做不同的操作,当它的对象和不同的,当它的数组。到目前为止,在我的代码中,我试图只考虑数组,所以我得到了以下异常。但是我无法检查对象或数组。

我遇到以下异常

    org.json.JSONException: JSONObject["URL"] is not a JSONArray.

任何人都可以建议如何修复它。在这里,我知道对象和数组是JSON对象的实例。但是我找不到一个函数来检查给定的实例是数组还是对象。

我已尝试使用此 if 条件,但没有成功

if ( myconf.length() == 0 ||myconf.has("URL")!=true||myconf.getJSONArray("URL").length()==0)

答案 1

JSON 对象和数组分别是 和 的实例。除此之外,还有一个事实,它有一个方法可以返回一个对象,你可以检查自己的类型,而不必担心ClassCastExceptions,然后你就可以了。JSONObjectJSONArrayJSONObjectget

if (!json.isNull("URL"))
{
    // Note, not `getJSONArray` or any of that.
    // This will give us whatever's at "URL", regardless of its type.
    Object item = json.get("URL"); 

    // `instanceof` tells us whether the object can be cast to a specific type
    if (item instanceof JSONArray)
    {
        // it's an array
        JSONArray urlArray = (JSONArray) item;
        // do all kinds of JSONArray'ish things with urlArray
    }
    else
    {
        // if you know it's either an array or an object, then it's an object
        JSONObject urlObject = (JSONObject) item;
        // do objecty stuff with urlObject
    }
}
else
{
    // URL is null/undefined
    // oh noes
}

答案 2

有很多方法。

如果您担心系统资源问题/滥用使用Java异常来确定数组或对象,则不太推荐使用。

try{
 // codes to get JSON object
} catch (JSONException e){
 // codes to get JSON array
}

建议这样做。

if (json instanceof Array) {
    // get JSON array
} else {
    // get JSON object
}