【问题标题】:Deserialize a JSON containing a list of objects using Gson使用 Gson 反序列化包含对象列表的 JSON
【发布时间】:2016-09-27 01:39:01
【问题描述】:

我正在尝试反序列化包含我的 Spring Web 应用程序中的字符串和对象列表的 JSON。

JSON

[
{
    "jsonrpc":"2.0",
    "result":[
    {
    "event":{
        "id":"27809810",
        "name":"Spezia v Trapani",
        "countryCode":"IT",
        "timezone":"Europe/London",
        "openDate":"2016-05-28T16:30:00.000Z" 
    },
    "marketCount":13
    },
    {
    "event":{
        "id":"27811083",
        "name":"Torino U19 v Atalanta U19",
        "countryCode":"IT",
        "timezone":"Europe/London",
        "openDate":"2016-05-29T16:15:00.000Z" 
    },
    "marketCount":18
    },
...
]

我的课程是:

ListEventsResponse 类

public class ListEventsResponse {
    private String jsonrpc;
    private List<ListEventsResult> result;

    public ListEventsResponse() { }

    public String getJsonrpc() {
        return jsonrpc;
    }

    public void setJsonrpc(String jsonrpc) {
        this.jsonrpc = jsonrpc;
    }

    public List<ListEventsResult> getResult() {
        return result;
    }

    public void setResult(List<ListEventsResult> result) {
        this.result = result;
    }
}

ListEventsResult 类

public class ListEventsResult {
    private Event event;
    private int marketCount;

    public ListEventsResult() { }

    public Event getEvent() {
        return event;
    }

    public void setEvent(Event event) {
        this.event = event;
    }

    public int getMarketCount() {
        return marketCount;
    }

    public void setMarketCount(int marketCount) {
        this.marketCount = marketCount;
    }
}

我也有Event类,由5个String(id、name等)组成。

控制器

[...]
ListEventsResponse listEvents = new Gson().fromJson(response.toString(), ListEventsResponse.class);         
List<ListEventsResult> eventsList = listEvents.getResult();
    return new ModelAndView("page", "eventsList", eventsList);

我的 .jsp 页面

[...]
<c:forEach items="${eventsList}" var="listEventsResult">
   Match: <c:out value="${listEventsResult.name}"/>
</c:forEach>
[...]

我的代码运行并且没有给出任何错误,但我的页面上没有显示任何匹配项,实际上 listEvents 不包含任何对象。

我不明白如何正确反序列化对象列表,所以我的问题是:反序列化包含对象列表的 json 背后的逻辑是什么?

我发布我的代码只是为了更好地解释我的问题。

【问题讨论】:

    标签: java json spring-mvc gson deserialization


    【解决方案1】:

    由于你有一个 Json 数组作为响应,你需要像下面这样反序列化

        Gson gson = new Gson();
        Type type = new TypeToken<List<ListEventsResponse>>(){}.getType();
        List<ListEventsResponse> events = (List<ListEventsResponse>) gson.fromJson(response.toString(), type);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      • 2022-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多