Gson исключение при чтении Json с JsonArray и JsonObject - PullRequest
0 голосов
/ 08 сентября 2011

Я пытаюсь вызвать JSON-ответ, используя Gson.Но он содержит объект JSONArray в одном месте и объект JSONObject в той же иерархии, здесь мой ответ json:

"{"SERVICES":{"Results":[{"Items":{"Item":[{"@Id":"10"},{"@Id":"12"}]}}, 
  {"Items":{"Item":{"@Id":"13"}}}]}}"

в структуре, которая находится в этой иерархии,

    {"SERVICES":
        {"Results":
            [
             {"Items":
                {"Item":
                    [
                     {"@Id":"10"},
                     {"@Id":"12"}
                    ]
                }
             },
             {"Items":
                {"Item":
                    {"@Id":"13"}
                }
             }
             ]
        }
    }

Здесь первый элемент Item содержит массив, а второй - объект.Ниже приведен мой код,

import java.util.Iterator;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;

public class Next { 
public static void main(String args[]){

    String jsonData = Services.getJsonData();   //{"SERVICES":{"Results":[{"Items":{"Item":[{"@Id":"10"},{"@Id":"12"}]}}, {"Items":{"Item":{"@Id":"13"}}}]}}    

    TResponseInfo responseInfo = new Gson().fromJson(jsonData, TResponseInfo.class);        
    }

class TResponseInfo{
    TServicesInfo SERVICES;
}

class TServicesInfo {
    List<TResultsInfo> Results;
}

class TResultsInfo {
    TItemsInfo Items;
}

class TItemsInfo {
    List<TItemInfo> Item;
    //TItemInfo Item;
}

class TItemInfo {
    @SerializedName("@Id")
    int Id;
}

Здесь я получаю исключение:

не удалось десериализовать объект json {"@Id": "13"} с учетом типа java.util.List

и сообщение: Это не массив JSON.

1 Ответ

0 голосов
/ 08 сентября 2011

Обновление: ваш Json кажется неправильным, ваш Item: - это массив, но поле секунд в вашем JSON - это объект.

Первое, что у вас есть:

"Item":
                [
                 {"@Id":"10"},
                 {"@Id":"12"}
                ]

тогда у вас есть:

"Item":
                {"@Id":"13"}

Это должно быть:

 "Item":
               [
                {"@Id":"13"}
               ]

Может быть сложно управлять генериками с помощью Gson. Я бы предложил вам использовать массивы вместо этого. Например. как то так:

class TResponseInfo{
    TServicesInfo SERVICES;
}

class TServicesInfo {
    TResultsInfo[] Results; // an array  instead of a generic List
}

class TResultsInfo {
    TItemsInfo Items;
}

class TItemsInfo {
    TItemInfo[] Item; // an array instead of a generic List
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...