Java Gson http响应难解析
问题描述:
我想解析来自服务器的http json响应的大响应。创建响应文件的类是有害的,因为文件太大。我试着用GSON,但没有效果Java Gson http响应难解析
这里是响应http://www.sendspace.pl/file/ff7257d27380cf5e0c67a33
而且我的代码:
try {
JsonReader reader = new JsonReader(content);
JsonElement json = new JsonParser().parse(reader);
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equals("devices")) {
System.out.println("gfdd");
} else {
reader.skipValue(); //avoid some unhandle events
}
}
reader.endObject();
reader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
我得到异常:
Exception in thread "main" java.lang.IllegalStateException: Expected BEGIN_OBJECT but was END_DOCUMENT at line 799 column 2
at com.google.gson.stream.JsonReader.expect(JsonReader.java:339)
at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:322)
at LightsControl.main(LightsControl.java:41)
答
为了解析您的JSON用GSON响应,你需要创建一些类到包装你的反应。
在你的情况,你应该有这样的:
public class Response {
@SerializedName("devices")
private List<Device> devices;
@SerializedName("scenes")
private List<Scene> scenes;
@SerializedName("sections")
private List<Section> sections;
//...other fields...
//getter and setter
}
然后:
public class Device{
@SerializedName("id")
private String id;
@SerializedName("name")
private String name;
@SerializedName("device_type")
private String deviceType;
@SerializedName("device_file")
private String deviceFile;
@SerializedName("states")
private List<State> states;
//... other fields
//getters and setters
}
然后你要做的带班Scene
,Section
,State
等相同。 .. 显然它有点乏味,因为你的JSON响应很长,有许多不同的值...
好处是,如果你不需要它们,你可以轻松地跳过值。例如,如果你不需要检索设备的states
,你可以从类Device
删除属性states
和GSON自动跳过这些价值观......
然后你只解析JSON与效应初探对象,如下所示:
String jsonString = "your json data...";
Gson gson = new Gson();
Response response = gson.fromJson(jsonString, Response.class);
JSON响应确实相当大,您是否要访问响应中的所有数据?在GSON中,你必须创建类来包装JSON响应,我可以向你解释如何,但它确实会“有害,因为文件太大”... – MikO 2013-04-10 14:20:54