用gson反序列化java中的json

用gson反序列化java中的json,java,android,json,gson,Java,Android,Json,Gson,我很难用gson在java中反序列化json 我有以下json: {"races":[ {"id":1,"mask":1,"side":"alliance","name":"Human"}, {"id":2,"mask":2,"side":"horde","name":"Orc"}, {"id":3,"mask":4,"side":"alliance","name":"Dwarf"}]} 我现在拥有的java代码是: StringRequest stringRequest = new Stri

我很难用gson在java中反序列化json

我有以下json:

{"races":[
{"id":1,"mask":1,"side":"alliance","name":"Human"},
{"id":2,"mask":2,"side":"horde","name":"Orc"},
{"id":3,"mask":4,"side":"alliance","name":"Dwarf"}]}
我现在拥有的java代码是:

StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Gson gson = new Gson();
                    Type type = new TypeToken<List<WoWDetails>>(){}.getType();
                    List<WoWRaces> races = gson.fromJson(response, type);
                    for (WoWRaces race : races){
                        if(raceID.equals(race.id)) {
                            raceName = race.name;
                        }
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            errorMSG = (TextView) findViewById(R.id. textView5);
            errorMSG.setText("That didn't work! URL: \n"+error);
            errorMSG.setVisibility(View.VISIBLE);
        }
    });
它给了我以下错误:

应为BEGIN\u数组,但为BEGIN\u对象

我已经搜索并访问了多个问题,但我似乎无法找到答案。我需要的数据是绑定到它的id和名称


提前感谢您

如果您正在使用gson库,请尝试此功能

    Gson gson = new Gson();
    MainResponse mainResponse = gson.fromJson(response, MainResponse.class);
    List<Race> races = mainResponse.getRaces();
    for (Race race : races) {
        Log.e("TEST","Race id : " + race.getId());
        Log.e("TEST","Race Name : " + race.getName());
    }

1.创建
RacesResponse
类别为:

 public class RacesResponse {

     @SerializedName("races")
     public List<WowRaces> list;
 }
公共级别比赛响应{
@序列化名称(“种族”)
公开名单;
}
2.将代码更改为:

RacesResponse racesResponse = gson.fromJson(response, RacesResponse.class);
List<WowRaces> races = racesResponse.list;
RacesResponse RacesResponse=gson.fromJson(response,RacesResponse.class);
列表种族=种族响应。列表;

您可以将json字符串放入应用程序并复制所有类,然后在
新的Gson.fromJson(jsonString,Example.class)中使用main class to

在url中选择此选项

  • 源类型:Json
  • 注释样式:Gson

  • 是否要解析JSON?请使用gson库。准确描述你的问题是很容易的:你说有问题,但不要说是什么问题。可能的重复是正确的。SO得到的错误“预期的BEGIN_数组但为BEGIN_对象”,是因为通过TypeToken,他告诉Gson预期一个数组,但JSON响应是一个对象(包含一个数组)。这个答案回答正确。我也会试试这个,谢谢你花时间来帮助我!我还不能提高投票率,我只是做了这个账户,我会尽我所能的!是..创建ItemResponse和Item类,然后您可以执行与之前相同的操作。
    public class Race {
    
        @SerializedName("id")
        @Expose
        private int id;
        @SerializedName("mask")
        @Expose
        private int mask;
        @SerializedName("side")
        @Expose
        private String side;
        @SerializedName("name")
        @Expose
        private String name;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public int getMask() {
            return mask;
        }
    
        public void setMask(int mask) {
            this.mask = mask;
        }
    
        public String getSide() {
            return side;
        }
    
        public void setSide(String side) {
            this.side = side;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    }
    
     public class RacesResponse {
    
         @SerializedName("races")
         public List<WowRaces> list;
     }
    
    RacesResponse racesResponse = gson.fromJson(response, RacesResponse.class);
    List<WowRaces> races = racesResponse.list;