确定JSON是JSONObject还是JSONArray

Gre*_*reg 124 arrays android json object

我将从服务器接收JSON对象或数组,但我不知道它将是什么.我需要使用JSON,但为了这样做,我需要知道它是Object还是Array.

我正在使用Android.

有没有人有这样做的好方法?

new*_*rld 234

我找到了更好的方法来确定:

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
Run Code Online (Sandbox Code Playgroud)

tokenizer能够返回更多类型:http://developer.android.com/reference/org/json/JSONTokener.html#nextValue()

  • @neworld,但是如果我处于循环中间怎么办。尝试获取data.getJSONArray()或data.getJSONObject()可能会抛出JSONEXception! (2认同)

nic*_*ild 53

有几种方法可以做到这一点:

  1. 您可以检查String的第一个位置处的字符(在删除空格之后,因为它在有效的JSON中是允许的).如果它是a {,你正在处理a JSONObject,如果它是a [,你正在处理a JSONArray.
  2. 如果您正在处理JSON(an Object),那么您可以进行instanceof检查. yourObject instanceof JSONObject.如果yourObject是JSONObject,则返回true.这同样适用于JSONArray.

  • 这绝对有效.最后,我将字符串放入JSONObject中,如果它抛出错误,那么我知道它是一个JSONArray.try {return new JSONObject(json); } catch(Exception e){} try {return new JSONArray(json); } catch(例外e){} (3认同)
  • 您的第一个选项将无法可靠地工作,因为在JSON数据的开头允许使用空格.您需要跳过任何前导空格并检查第一个非空白字符. (3认同)

sou*_*els 13

这是我在Android上使用的简单解决方案:

JSONObject json = new JSONObject(jsonString);

if (json.has("data")) {

    JSONObject dataObject = json.optJSONObject("data");

    if (dataObject != null) {

        //Do things with object.

    } else {

        JSONArray array = json.optJSONArray("data");

        //Do things with array
    }
} else {
    // Do nothing or throw exception if "data" is a mandatory field
}
Run Code Online (Sandbox Code Playgroud)


Bha*_*nki 6

提出另一种方式:

if(server_response.trim().charAt(0) == '[') {
    Log.e("Response is : " , "JSONArray");
} else if(server_response.trim().charAt(0) == '{') {
    Log.e("Response is : " , "JSONObject");
}
Run Code Online (Sandbox Code Playgroud)

server_response是来自服务器的响应字符串