一尘不染

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

json

我正在从网站获取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)

阅读 421

收藏
2020-07-27

共1个答案

一尘不染

JSON对象和数组分别是JSONObject和的实例JSONArray。再加上这一事实JSONObject有一个get,将返回你的对象,你可以检查自己的类型,而无需担心ClassCastExceptions异常,并有亚去的方法。

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
}
2020-07-27