Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parse JSON array response using Retrofit & Gson

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.

like image 469
Deep Shah Avatar asked Mar 06 '17 10:03

Deep Shah


2 Answers

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.

like image 64
Dharmbir Singh Avatar answered Oct 13 '22 00:10

Dharmbir Singh


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.

  1. Select Target language as JAVA,
  2. Source type as JSON
  3. Annotation style as Gson
  4. and check Use primitive types , include getters and setters, allow additional properties
like image 41
Deepak G Avatar answered Oct 13 '22 00:10

Deepak G