2016-08-26 1 views
1

Я использовал Gson для разбора строки JSON, возвращаемой из внешнего API, в класс Java. Все работает нормально, но у меня есть одна проблема, которую я не могу решить.Parse Json with Gson и проблемы со списком

Проблема заключается в том, что внешний API иногда возвращает JSON как это:

{ Token: { TokenId : '123' } } 

, а иногда и JSON как это:

{ Token: [{ TokenId : '123' }, { TokenId : '124' }] } 

Если мой класс установлен, чтобы содержать список токенов, то Gson не сможет проанализировать JSON из первого примера. Как я могу разобрать JSON в обоих случаях?

+0

вам нужно проверить, является ли обратный API JSON со списком или как в первом примере. Прочитайте значение Tocken и проверьте, есть ли его список или нет. если его список затем вызывает функцию для анализа списка –

ответ

1

Быстрый способ сделать это состоит в следующем

import com.google.gson.JsonArray; 
import com.google.gson.JsonElement; 
import com.google.gson.JsonObject; 
import com.google.gson.JsonParser; 
import com.google.gson.stream.JsonReader; 

public class Clazz { 
    public static void main(String[] args) throws Exception { 

    String singularJson = "{ Token: { TokenId : '123' } }"; 
    String multipleJson = "{ Token: [{ TokenId : '123' }, { TokenId : '124' }] }"; 

    JsonElement jsonElementToken = new JsonParser().parse(multipleJson); 
    JsonElement jsonCollectionOrSingular = jsonElementToken.getAsJsonObject().get("Token"); 
    if (jsonCollectionOrSingular.isJsonArray()) { 
     System.out.println("It is an collection and not a object"); 
     JsonArray jsonArray = jsonCollectionOrSingular.getAsJsonArray(); 
     System.out.println(jsonArray.get(0).getAsJsonObject().get("TokenId")); 

    } else { 
     System.out.println("It is an object and not a collection"); 
     JsonObject jsonObject = jsonCollectionOrSingular.getAsJsonObject(); 
     System.out.println(jsonObject.get("TokenId")); 

    } 

} 

}

0

Преобразуйте весь ответ, чтобы посмотреть что-то вроде второго примера перед преобразованием в класс.

Ниже будет служить подсказкой

jsonString=jsonString.replace("{ Token: {","{ Token: [{"); 
jsonString=jsonString.replace("} }","}] }");