Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JsonArray和JsonObject读取Json时发生Gson异常_Java_Android_Web Services_Json_Gson - Fatal编程技术网

Java 使用JsonArray和JsonObject读取Json时发生Gson异常

Java 使用JsonArray和JsonObject读取Json时发生Gson异常,java,android,web-services,json,gson,Java,Android,Web Services,Json,Gson,我试图使用Gson调用json响应。但它在一个位置上包含一个JSONArray对象,在同一层次结构中包含一个JSONObject,我的json响应如下: "{"SERVICES":{"Results":[{"Items":{"Item":[{"@Id":"10"},{"@Id":"12"}]}}, {"Items":{"Item":{"@Id":"13"}}}]}}" 在这个层次结构中 {"SERVICES": {"Results": [

我试图使用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;
}
import java.util.Iterator;
导入java.util.List;
导入com.google.gson.gson;
导入com.google.gson.annotations.SerializedName;
公共类下一个{
公共静态void main(字符串参数[]){
字符串jsonData=Services.getJsonData();//{“Services”:{“Results”:[{“Items”:{“Item”:{“Item”:[{“@Id”:“10”},{“@Id”:“12”}]}},{“Items”:{“Item”:{@Id”:“13”}}}}}
TResponseInfo responseInfo=new Gson().fromJson(jsonData,TResponseInfo.class);
}
TResponseInfo类{
TServicesInfo服务;
}
类TServicesInfo{
列出结果;
}
TResultsInfo类{
滴度信息项目;
}
类titeminfo{
清单项目;
//滴度信息项;
}
类TItemInfo{
@SerializedName(“@Id”)
int-Id;
}
这里我得到了一个例外:

由于类型为java.util.List,无法反序列化json对象{“@Id”:“13”}


消息:这不是一个JSON数组。

更新:您的JSON似乎是错误的,您的
项:
是一个数组,但JSON中的秒字段是一个对象

首先,你有:

"Item":
                [
                 {"@Id":"10"},
                 {"@Id":"12"}
                ]
"Item":
                {"@Id":"13"}
那么你有:

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

谢谢Jonas,但我也得到了一个例外:“com.google.gson.JsonObject不能转换为com.google.gson.JsonArray”。