Разобрать поле json, которое может быть JSONObject или JSONArray в Java - PullRequest
0 голосов
/ 23 января 2012

Я использую библиотеку json.org для анализа моего json.Но у меня есть поле с именем «messages», которое в зависимости от количества сообщений может быть пустым, JSONObject (если есть только одно сообщение) или JSONArray, если имеется несколько сообщений.У меня возникли проблемы с этим, потому что я должен прочитать его, используя правильный тип объекта, так как он вернет ошибку, если я не сделаю это правильно.О, и это Java.

Кто-нибудь может мне помочь?Я уверен, что есть "стандартный" способ справиться с этим!

Ответы [ 2 ]

1 голос
/ 23 января 2012

Я бы просто создал простой служебный метод, например, так:

private void processMessages(Object messages) {
    JSONArray jsonArr;
    if (messages instanceof JSONObject) {
        jsonArr = new JSONArray();
        jsonArr.put(messages);
    } else if (messages instanceof JSONArray) {
        jsonArr = messages;
    }

    // Process all the JSONObjects in the same way
    for (final JSONObject obj : jsonArr) {

    }
}

А затем изнутри вашего кода:

if (jsonObj.has("messages")) {
    processMessages(jsonObj.get("messages"));
}
0 голосов
/ 23 января 2012

Предполагается, что вы используете JSONTokener :

JSONTokener jk = ...; // whatever you're currently doing.

// Probably a loop here around the below...

Object o = jk.nextValue();
if(o instanceof JSONObject){
  JSONObject jo = (JSONObject)o;
  // Do something with jo.
}else if(o instanceof JSONArray){
  JSONArray ja = (JSONArray)o;
  // Do something with ja.
}else{
  // Is null or another type.  (Maybe do something?)
}

См. http://www.json.org/javadoc/org/json/JSONTokener.html#nextValue%28%29 для всех других типов, которые могут быть возвращены из nextValue().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...