繁体   English   中英

使用Gson解析Json结果

[英]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文档可能包含您的答案。

请参阅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'}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM