[英]parsing Json result using 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
我认为GSON文档可能包含您的答案。
这是一个例子:
package com.stackexchange.stackoverflow;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.annotations.SerializedName;
public class Question19282481 {
public static void main(String[] args) {
String json = "{\"ContentEncoding\":null,\"ContentType\":null,\"Data\":[{\"Id\":3,\"Name\":\"Alabama\"},\n" +
"{\"Id\":4,\"Name\":\"Alaska\"},{\"Id\":5,\"Name\":\"Arizona\"},{\"Id\":6,\"Name\":\"Arkansas\"}]}";
Gson gson = new Gson();
JsonParser jsonParser = new JsonParser();
JsonElement jsonElement = jsonParser.parse(json);
JsonObject jsonObject = jsonElement.getAsJsonObject();
JsonArray jsonArray = jsonObject.getAsJsonArray("Data");
for(JsonElement obj : jsonArray) {
CustomModel customModel = gson.fromJson(obj, CustomModel.class);
System.out.println(customModel);
}
}
class CustomModel {
@SerializedName("Id")
private int id;
@SerializedName("Name")
private String name;
int getId() {
return id;
}
void setId(int id) {
this.id = id;
}
String getName() {
return name;
}
void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "CustomModel{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
}
取决于:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
程序输出是这样的:
CustomModel{id=3, name='Alabama'}
CustomModel{id=4, name='Alaska'}
CustomModel{id=5, name='Arizona'}
CustomModel{id=6, name='Arkansas'}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.