0

我第一次使用 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" 内引发错误。我一直试图通过谷歌搜索来解决这个问题,但没有答案有帮助

4

2 回答 2

2

我认为您没有导入java.lang.StringCustomModel而是使用了一个名为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
于 2013-10-09T21:11:05.810 回答
0

我认为 GSON 文档可能包含您的答案。

请参阅https://sites.google.com/site/gson/gson-user-guide#TOC-Serializing-and-Deserializing-Collection-with-Objects-of-Arbitrary-Types

这是一个例子:

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'}
于 2013-10-09T21:10:57.373 回答