使用gson在java中反序列化json
我用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() { @Override public void onResponse(String response) { Gson gson = new Gson(); Type type = new TypeToken<List>(){}.getType(); List 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); } });
在WoWRaces.java中是以下代码:
WoWRaces.java
public class WoWRaces { public Integer id; public String name; }
它给了我以下错误:
预计BEGIN_ARRAY但是BEGIN_OBJECT
我搜索并访问了多个问题,但我似乎无法解决这个问题。 我需要的数据是id和绑定它的名称。
先感谢您
如果您正在使用gson库,那么试试这个
Gson gson = new Gson(); MainResponse mainResponse = gson.fromJson(response, MainResponse.class); List races = mainResponse.getRaces(); for (Race race : races) { Log.e("TEST","Race id : " + race.getId()); Log.e("TEST","Race Name : " + race.getName()); }
MainResponse.java
public class MainResponse { @SerializedName("races") @Expose private List races = null; public List getRaces() { return races; } public void setRaces(List races) { this.races = races; } }
Race.java
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; } }
1.创建RacesResponse
类:
public class RacesResponse { @SerializedName("races") public List list; }
2.将您的代码更改为:
RacesResponse racesResponse = gson.fromJson(response, RacesResponse.class); List races = racesResponse.list;
你可以把你的json字符串放在这里并复制你的app中的所有类,并在new Gson.fromJson(jsonString,Example.class)
使用main类new Gson.fromJson(jsonString,Example.class)
在url中选择此选项
- 来源类型:Json
- 注释风格:Gson