java - 使用Gson解析Json结果

标签 java json gson

我是第一次使用 GSON,当我调用 httpGet 请求时,它返回一个 Json 对象字符串结果,如下所示:

{"ContentEncoding":null,"ContentType":null,"Data":[{"Id":3,"Name":"Alabama"},
{"Id":4,"Name":"Alaska"},{"Id":5,"Name":"Arizona"},{"Id":6,"Name":"Arkansas"}]}

我想要的只是 Data 对象,所以我的 CustomModel 类如下所示:

 public class CustomModel {

@SerializedName("Id")
private int Id;

@SerializedName("Name")
private string Name;

public int getId() {
   return this.Id;
}
 public void setId(int id) {
   this.Id = id;
}
 public string getName() {
   return this.Name;
}
 public void setName(string Name) {
   this.Name = Name;
}

}

使用 GSON 我尝试像这样解析它:

 JsonArray Jarray = (JsonArray) parser.parse(results).getAsJsonObject().get("Data");
 for(JsonElement obj : Jarray )
 {

    CustomModel cse = gson.fromJson(obj  , CustomModel.class);
    // list.add(cse); //add the values to global List object
 }

但这会在 for 循环内引发错误“Expected Begin_Object but was string”。我一直试图通过谷歌搜索来解决这个问题,但没有答案有帮助

最佳答案

我认为您没有在 CustomModel 中导入 java.lang.String,而是使用名为 string 的自定义类。这就是 Gson 被视为 Object 的内容。

Expected Begin_Object but was string

您应该导入java.lang.String

<小时/>

是的,您可以直接将列表反序列化为

,而不是循环
Type listType = new TypeToken<List<CustomModel>>(){}.getType();
List<CustomModel> listCSE = gson.fromJson(Jarray, listType);

System.out.println(listCSE.get(0).getName()); // Alabama

关于java - 使用Gson解析Json结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19282481/

相关文章:

javascript - 无法将 JSON 解析为 Javascript 对象

java - 使用 Gson 将 Java 对象转换为 JsonObject

android - Retrofit 2 RxJava - Gson - "Global"反序列化,改变响应类型

java - 如何在没有 jackson 注释的情况下忽略反序列化的某些字段?

javascript - 将 JSON 对象推送到数组

java - GenCollectForAllocation 是什么意思?

javascript - 如何在 c3js 饼图上绘制自定义 JSON 数据?

java - 使用Gson将Json转换为Java Object

java - 如何将 libGDX Gradle 复制的文件从工作区导出回原始项目?

java - 具有异步支持的 Spring Mvc 与 Spring WebFlux