Java Gson http响应解析困难

标签 java parsing gson

我想解析来自服务器的 http json 响应的大响应。创建响应文件的类是有害的,因为文件太大。我尝试使用gson,但没有效果

这是回复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)

最佳答案

为了使用 GSON 解析您的 JSON 响应,您需要创建许多类来包装您的响应。

就您而言,您应该有类似的内容:

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
}

然后您必须对 SceneSectionState 等类执行相同的操作... 显然这有点乏味,因为你的 JSON 响应很长,有很多不同的值......

好处是,如果不需要值,您可以轻松跳过它们。例如,如果您不需要检索设备的 states,则只需从 Device 类中删除属性 states 即可GSON 自动跳过这些值...

然后您只需使用 Reponse 对象解析 JSON,如下所示:

String jsonString = "your json data...";
Gson gson = new Gson();
Response response = gson.fromJson(jsonString, Response.class);

关于Java Gson http响应解析困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15924550/

相关文章:

java - Tomcat 7 log 有效web.xml的内容

java - 如何在父项目中包含子项目的资源?

xml - 在Gradle中,复制到项目后无法修改xml

java - 使用Gson库将JSON转换为Java对象第二个参数null

java - 使用 GSON 将 POJO 反序列化为 JSON 时将字段名称更改为小写?

Java GUI 将 JList 添加到另一个文件中的类

java - 所有 fragment 都在 Activity 时加载

c++ - boost spirit X3 : Collapsing one-element lists

java - 如何使用 XdmNode 从标签读取 namespace ?

java - 如何在不包括某些标签的 Java 中将 XML 转换为 JSON?