簡體   English   中英

使用JsonArray和JsonObject讀取Json時出現Gson異常

[英]Gson exception while reading Json with JsonArray and JsonObject

我正在嘗試使用Gson調用json響應。 但是它在同一位置包含一個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;
}

在這里,我得到了例外:

給定類型java.util.List,無法反序列化json對象{“ @Id”:“ 13”}

和消息:這不是JSON數組。

更新:您的Json似乎是錯誤的,您的Item:是一個數組,但是JSON中的seconds字段是一個對象。

首先,您有:

"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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM