我第一次使用GSON,当我调用httpGet请求时,它返回一个Json对象字符串 result ,如下所示:
{"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但是是string”。我一直试图通过谷歌搜索来解决这个问题,但没有回答帮助
答案 0 :(得分:2)
我认为您没有在java.lang.String
中导入CustomModel
,而是使用名为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
答案 1 :(得分:0)
我认为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'}