2017-01-11 1 views
1

я получаю следующий ответ JSON: «данных» в объекте:Как обрабатывать Дооснащаемый JSON динамически

"status": true, 
"data":{ 
    //Some data 
} 

Иногда приходит в массиве как:

"status": true, 
"data":[ 
    //Some data 
] 

Как проверить реакцию Дейтов динамически, что, является объектом или массивом? * Я использую Дооснащение

Мой Дооснащаемый разборе для массива, как:

@SerializedName("data") 
ArrayList<DataDetail> dataList; 

Заранее спасибо!

+0

Возможный дубликат [Определить, является ли JSON JSONObject или JSONArray] (http://stackoverflow.com/questions/6118708/determine-whether-json-is-a-jsonobject-or-jsonarray). –

+0

Я думаю, что вы не можете справиться с этим, потому что все происходит, связанное с разбором json в фоновом режиме для вашего обновления. Итак, где вы будете проверять instanceof. Вы должны изменить свою модифицированную структуру. –

+0

Да, я столкнулся с такой же проблемой. @Ready Android –

ответ

1

Если Json неизвестно, что будет ли это JSONObject или JsonArray, а затем просто использовать JsonElement, как показано ниже:

@SerializedName("data") 
private JsonElement data; 

Теперь, чтобы превратить эту JsonElement в вашей соответствующей модели в соответствии с вашим требованием вы можете использовать код ниже:

if(data instanceOf JsonObject){ 
    YourModelForData object = YourDataComponentForObject(data); 
    // Do anything with Object 
} else { 
    List<YourModelForData> array = YourDataComponentForArray(data); 
    // Do anything with array 
} 

public YourModelForData YourDataComponentForObject(JsonElement data) { 
    Type type = new TypeToken<YourModelForData>() { 
    }.getType(); 
    YourModelForData item = new Gson().fromJson(data, type); 
} 

public List<YourModelForData> YourDataComponentForArray(JsonElement data) { 
     Type type = new TypeToken<List<YourModelForData>>() { 
     }.getType(); 
     List<YourModelForData> items = new Gson().fromJson(data, type); 
} 

Happy Coding < {}>;

+0

Этот метод возвращает только список, но как насчет того, когда приходит только объект? –

+0

Я отредактировал свой ответ, попробуйте это. Поскольку проверка объекта или массива должна поддерживаться с помощью instanceof, и пусть JsonElement обрабатывает тип данных сериализации. Вы также можете прибегнуть к методу json, используя getAsJsonObject или getAsJsonArray, используя gson. –

+0

Посмотрите хорошо !!, но где вызвать метод выше и что он вернется? @Siraj Sumra –

2
JSONObject json; 
Object  intervention; 
JSONArray interventionJsonArray; 
JSONObject interventionObject; 

json = RestManager.getJSONfromURL(myuri); // retrieve the entire json stream  
Object intervention = json.get("intervention"); 
if (intervention instanceof JSONArray) { 
    // It's an array 
    interventionJsonArray = (JSONArray)intervention; 
} 
else if (intervention instanceof JSONObject) { 
    // It's an object 
    interventionObject = (JSONObject)intervention; 
} 
else { 
    // It's something else, like a string or number 
} 

проверить эту нить Test if it is JSONObject or JSONArray

 Смежные вопросы

  • Нет связанных вопросов^_^