问题
Here is my JSONArray Response from Web service:
[
{
\"sponsors\": [
{
\"leg_id\": \"NYL000067\",
\"type\": \"primary\",
\"name\": \"AUBRY\"
},
{
\"leg_id\": \"NYL000171\",
\"type\": \"cosponsor\",
\"name\": \"PERRY\"
},
{
\"leg_id\": \"NYL000066\",
\"type\": \"cosponsor\",
\"name\": \"ARROYO\"
},
{
\"leg_id\": \"NYL000223\",
\"type\": \"cosponsor\",
\"name\": \"BARRETT\"
},
{
\"leg_id\": \"NYL000312\",
\"type\": \"cosponsor\",
\"name\": \"STECK\"
},
{
\"leg_id\": \"NYL000180\",
\"type\": \"cosponsor\",
\"name\": \"RIVERA\"
},
{
\"leg_id\": \"NYL000114\",
\"type\": \"cosponsor\",
\"name\": \"GOTTFRIED\"
},
{
\"leg_id\": \"NYL000091\",
\"type\": \"cosponsor\",
\"name\": \"COOK\"
},
{
\"leg_id\": \"NYL000126\",
\"type\": \"cosponsor\",
\"name\": \"JAFFEE\"
},
{
\"leg_id\": \"NYL000327\",
\"type\": \"cosponsor\",
\"name\": \"DAVILA\"
},
{
\"leg_id\": \"NYL000144\",
\"type\": \"cosponsor\",
\"name\": \"LUPARDO\"
},
{
\"leg_id\": null,
\"type\": \"cosponsor\",
\"name\": \"SEPULVEDA\",
\"committee_id\": null
},
{
\"leg_id\": \"NYL000290\",
\"type\": \"cosponsor\",
\"name\": \"MOSLEY\"
},
{
\"leg_id\": \"NYL000167\",
\"type\": \"cosponsor\",
\"name\": \"ORTIZ\"
},
{
\"leg_id\": \"NYL000170\",
\"type\": \"cosponsor\",
\"name\": \"PEOPLES-STOKES\"
},
{
\"leg_id\": \"NYL000221\",
\"type\": \"cosponsor\",
\"name\": \"SKARTADOS\"
},
{
\"leg_id\": \"NYL000216\",
\"type\": \"cosponsor\",
\"name\": \"QUART\"
},
{
\"leg_id\": \"NYL000208\",
\"type\": \"cosponsor\",
\"name\": \"WEPRIN\"
},
{
\"leg_id\": \"NYL000186\",
\"type\": \"cosponsor\",
\"name\": \"ROSENTHAL\"
},
{
\"leg_id\": \"NYL000139\",
\"type\": \"cosponsor\",
\"name\": \"LIFTON\"
},
{
\"leg_id\": \"NYL000064\",
\"type\": \"cosponsor\",
\"name\": \"ABINANTI\"
},
{
\"leg_id\": \"NYL000173\",
\"type\": \"cosponsor\",
\"name\": \"PRETLOW\"
},
{
\"leg_id\": \"NYL000339\",
\"type\": \"cosponsor\",
\"name\": \"BICHOTTE\"
},
{
\"leg_id\": null,
\"type\": \"cosponsor\",
\"name\": \"BARRON\",
\"committee_id\": null
},
{
\"leg_id\": \"NYL000341\",
\"type\": \"cosponsor\",
\"name\": \"WALKER\"
},
{
\"leg_id\": \"NYL000355\",
\"type\": \"cosponsor\",
\"name\": \"BLAKE\"
},
{
\"leg_id\": \"NYL000185\",
\"type\": \"cosponsor\",
\"name\": \"RODRIGUEZ\"
},
{
\"leg_id\": \"NYL000259\",
\"type\": \"cosponsor\",
\"name\": \"FAHY\"
},
{
\"leg_id\": \"NYL000203\",
\"type\": \"cosponsor\",
\"name\": \"TITONE\"
},
{
\"leg_id\": \"NYL000286\",
\"type\": \"cosponsor\",
\"name\": \"MCDONALD\"
},
{
\"leg_id\": \"NYL000081\",
\"type\": \"cosponsor\",
\"name\": \"CAHILL\"
},
{
\"leg_id\": \"NYL000421\",
\"type\": \"cosponsor\",
\"name\": \"HARRIS\"
},
{
\"leg_id\": \"NYL000338\",
\"type\": \"cosponsor\",
\"name\": \"JOYNER\"
},
{
\"leg_id\": \"NYL000448\",
\"type\": \"cosponsor\",
\"name\": \"JENNE\"
},
{
\"leg_id\": \"NYL000070\",
\"type\": \"cosponsor\",
\"name\": \"BENEDETTO\"
},
{
\"leg_id\": \"NYL000310\",
\"type\": \"cosponsor\",
\"name\": \"SOLAGES\"
},
{
\"leg_id\": \"NYL000357\",
\"type\": \"cosponsor\",
\"name\": \"RICHARDSON\"
},
{
\"leg_id\": \"NYL000324\",
\"type\": \"cosponsor\",
\"name\": \"PICHARDO\"
},
{
\"leg_id\": \"NYL000423\",
\"type\": \"cosponsor\",
\"name\": \"HYNDMAN\"
},
{
\"leg_id\": \"NYL000313\",
\"type\": \"cosponsor\",
\"name\": \"STIRPE\"
},
{
\"leg_id\": \"NYL000131\",
\"type\": \"cosponsor\",
\"name\": \"KAVANAGH\"
},
{
\"leg_id\": \"NYL000204\",
\"type\": \"cosponsor\",
\"name\": \"TITUS\"
},
{
\"leg_id\": \"NYL000275\",
\"type\": \"cosponsor\",
\"name\": \"KIM\"
},
{
\"leg_id\": \"NYL000195\",
\"type\": \"cosponsor\",
\"name\": \"SIMOTAS\"
},
{
\"leg_id\": \"NYL000293\",
\"type\": \"cosponsor\",
\"name\": \"OTIS\"
},
{
\"leg_id\": \"NYL000220\",
\"type\": \"cosponsor\",
\"name\": \"MAYER\"
},
{
\"leg_id\": \"NYL000344\",
\"type\": \"cosponsor\",
\"name\": \"JEAN-PIERRE\"
}
],
\"id\": \"NYB00099404\"
},
{
\"sponsors\": [
{
\"leg_id\": \"NJL000113\",
\"type\": \"primary\",
\"name\": \"Vainieri Huttle, Valerie\"
}
],
\"id\": \"NJB00038817\"
},
{
\"sponsors\": [
{
\"leg_id\": \"NYL000208\",
\"type\": \"primary\",
\"name\": \"WEPRIN\"
}
],
\"id\": \"NYB00066288\"
},
{
\"sponsors\": [
{
\"leg_id\": \"NJL000083\",
\"type\": \"primary\",
\"name\": \"Jasey, Mila M.\"
},
{
\"leg_id\": \"NJL000086\",
\"type\": \"primary\",
\"name\": \"Caputo, Ralph R.\"
},
{
\"leg_id\": \"NJL000046\",
\"type\": \"primary\",
\"name\": \"Watson Coleman, Bonnie\"
},
{
\"leg_id\": \"NJL000177\",
\"type\": \"primary\",
\"name\": \"Pintor Marin, Eliana\"
},
{
\"leg_id\": \"NJL000164\",
\"type\": \"primary\",
\"name\": \"Sumter, Shavonda E.\"
},
{
\"leg_id\": \"NJL000104\",
\"type\": \"primary\",
\"name\": \"Oliver, Sheila Y.\"
},
{
\"leg_id\": \"NJL000095\",
\"type\": \"primary\",
\"name\": \"Mainor, Charles\"
},
{
\"leg_id\": \"NJL000165\",
\"type\": \"primary\",
\"name\": \"Wimberly, Benjie E.\"
},
{
\"leg_id\": \"NJL000016\",
\"type\": \"cosponsor\",
\"name\": \"Fuentes, Angel\"
},
{
\"leg_id\": \"NJL000085\",
\"type\": \"cosponsor\",
\"name\": \"Tucker, Cleopatra G.\"
},
{
\"leg_id\": \"NJL000067\",
\"type\": \"cosponsor\",
\"name\": \"Stender, Linda\"
},
{
\"leg_id\": \"NJL000114\",
\"type\": \"cosponsor\",
\"name\": \"Johnson, Gordon M.\"
},
{
\"leg_id\": \"NJL000082\",
\"type\": \"cosponsor\",
\"name\": \"McKeon, John F.\"
},
{
\"leg_id\": \"NJL000129\",
\"type\": \"cosponsor\",
\"name\": \"Singleton, Troy\"
}
],
\"id\": \"NJB00030216\"
},
{
\"sponsors\": [
{
\"leg_id\": \"NYL000088\",
\"official_type\": \"SPONSOR\",
\"type\": \"primary\",
\"name\": \"Clark\"
},
{
\"leg_id\": \"NYL000171\",
\"official_type\": \"COSPNSR\",
\"type\": \"cosponsor\",
\"name\": \"Perry\"
}
],
\"id\": \"NYB00035573\"
},
{
\"sponsors\": [
{
\"leg_id\": \"NJL000111\",
\"type\": \"primary\",
\"name\": \"Schaer, Gary S.\"
},
{
\"leg_id\": \"NJL000018\",
\"type\": \"primary\",
\"name\": \"Lampitt, Pamela R.\"
},
{
\"leg_id\": \"NJL000105\",
\"type\": \"primary\",
\"name\": \"Giblin, Thomas P.\"
},
{
\"leg_id\": \"NJL000171\",
\"type\": \"primary\",
\"name\": \"Mosquera, Gabriela M.\"
},
{
\"leg_id\": \"NJL000011\",
\"type\": \"cosponsor\",
\"name\": \"Moriarty, Paul D.\"
},
{
\"leg_id\": \"NJL000165\",
\"type\": \"cosponsor\",
\"name\": \"Wimberly, Benjie E.\"
},
{
\"leg_id\": \"NJL000010\",
\"type\": \"cosponsor\",
\"name\": \"Madden, Fred H.\"
},
{
\"leg_id\": \"NJL000007\",
\"type\": \"cosponsor\",
\"name\": \"Sweeney, Stephen M.\"
},
{
\"leg_id\": \"NJL000039\",
\"type\": \"cosponsor\",
\"name\": \"Thompson, Samuel D.\"
},
{
\"leg_id\": \"NJL000112\",
\"type\": \"cosponsor\",
\"name\": \"Weinberg, Loretta\"
},
{
\"leg_id\": \"NJL000087\",
\"type\": \"cosponsor\",
\"name\": \"Ruiz, M. Teresa\"
}
],
\"id\": \"NJB00021785\"
},
{
\"sponsors\": [
{
\"leg_id\": \"NYL000138\",
\"official_type\": \"SPONSOR\",
\"type\": \"primary\",
\"name\": \"Lentol\"
}
],
\"id\": \"NYB00010409\"
},
{
\"sponsors\": [
{
\"leg_id\": \"NJL000028\",
\"type\": \"primary\",
\"name\": \"Gove, DiAnne C.\"
},
{
\"leg_id\": \"NJL000027\",
\"type\": \"primary\",
\"name\": \"Rumpf, Brian E.\"
},
{
\"leg_id\": \"NJL000099\",
\"type\": \"cosponsor\",
\"name\": \"Prieto, Vincent\"
}
],
\"id\": \"NJB00002928\"
},
{
\"sponsors\": [
{
\"leg_id\": \"NJL000094\",
\"type\": \"primary\",
\"name\": \"Chiappone, Anthony\"
},
{
\"leg_id\": \"NJL000034\",
\"type\": \"cosponsor\",
\"name\": \"Angelini, Mary Pat\"
}
],
\"id\": \"NJB00010952\"
}
]
Here is ApiInterface.java
public interface ApiInterface {
@GET(\"bills/\")
Call<SponsorsResult> getListOfSponsors(@Query(\"bill_id\") String billId , @Query(\"session\") String session, @Query(\"fields\") String field);
}
And here is call of method & response :
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
Call<SponsorsResult> call = apiService.getListOfSponsors(AppConstants.ASSEMBLY_BILL_ID,AppConstants.SESSION,AppConstants.FIELD);
call.enqueue(new Callback<SponsorsResult>() {
@Override
public void onResponse(Call<SponsorsResult> call, Response<SponsorsResult> response) {
Log.d(TAG,\"Number :\"+response.raw());
List<Sponsor> sponsors = response.body().getSponsors();
Log.d(TAG,\"Number of sponsors :\"+ sponsors.size());
}
@Override
public void onFailure(Call<SponsorsResult> call, Throwable t) {
t.printStackTrace();
}
});
As of now it fails & here is logcat output :
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
It fails to execute response . Guide me to parse this response.
回答1:
Please try to use this one
@FormUrlEncoded
@POST("api/sponsors")
Call<List<SponsorsResult>> getStatesAndDistrict(
@Field("xyz") String field1
);
Call <List<SponsorsResult>> call = service.getSponsorsValue();
call.enqueue(new Callback<List<SponsorsResult>>() {
@Override
public void onResponse(Call<List<SponsorsResult>> call, Response<List<SponsorsResult>> response) {
List<SponsorsResult> rs = response.body();
}
@Override
public void onFailure(Call<List<SponsorsResult>> call, Throwable t) {
}
});
class SponsorsResult {
@SerializedName("sponsors")
private List<SponsorsValue> sponsors;
public List<SponsorsValue> getSponsors() {
return sponsors;
}
}
class SponsorsValue{
@SerializedName("leg_id")
@Expose
private String legId;
@SerializedName("type")
@Expose
private String type;
@SerializedName("name")
@Expose
private String name;
public String getLegId() {
return legId;
}
public void setLegId(String legId) {
this.legId = legId;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Please let me know if you are facing any issue.
回答2:
You can create POJO classes from json response automatically using this link -> jsonschema2pojo
All you need to do is paste the JSON response in the edit box given.
- Select Target language as JAVA,
- Source type as JSON
- Annotation style as Gson
- and check Use primitive types , include getters and setters, allow additional properties
回答3:
Create below class in your model package:
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class SponsorModel {
@SerializedName("sponsors")
@Expose
private List<Sponsor> sponsors = null;
@SerializedName("id")
@Expose
private String id;
public List<Sponsor> getSponsors() {
return sponsors;
}
public void setSponsors(List<Sponsor> sponsors) {
this.sponsors = sponsors;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
-----------------------------------Sponsor.java-----------------------------------
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Sponsor {
@SerializedName("leg_id")
@Expose
private String legId;
@SerializedName("type")
@Expose
private String type;
@SerializedName("name")
@Expose
private String name;
@SerializedName("committee_id")
@Expose
private Object committeeId;
@SerializedName("official_type")
@Expose
private String officialType;
public String getLegId() {
return legId;
}
public void setLegId(String legId) {
this.legId = legId;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Object getCommitteeId() {
return committeeId;
}
public void setCommitteeId(Object committeeId) {
this.committeeId = committeeId;
}
public String getOfficialType() {
return officialType;
}
public void setOfficialType(String officialType) {
this.officialType = officialType;
}
}
Set above SponsorsModel in your result.
Thanks
来源:https://stackoverflow.com/questions/42623437/parse-json-array-response-using-retrofit-gson