web-dev-qa-db-fra.com

Analyser la réponse du tableau JSON à l'aide de Retrofit et de Gson

Voici ma réponse JSONArray du service Web:

[
  {
    "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"
  }
]

Voici ApiInterface.Java

    public interface ApiInterface {

    @GET("bills/")
    Call<SponsorsResult> getListOfSponsors(@Query("bill_id") String billId , @Query("session") String session, @Query("fields") String field);

}

Et voici l'appel de la méthode et de la réponse:

 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();
                    }
                });

À partir de maintenant, cela échoue et voici la sortie de logcat:

com.google.gson.JsonSyntaxException: Java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $

Il ne parvient pas à exécuter la réponse. Guide-moi pour analyser cette réponse.

19
Deep Shah

S'il vous plaît essayez d'utiliser celui-ci

    @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;
    }

}

S'il vous plaît laissez-moi savoir si vous êtes confronté à un problème.

27
Dharmbir Singh

Vous pouvez créer automatiquement des classes POJO à partir de la réponse json en utilisant ce lien -> jsonschema2pojo

Tout ce que vous avez à faire est de coller la réponse JSON dans la zone d'édition indiquée.

  1. Sélectionnez la langue cible en Java,
  2. Type de source en JSON
  3. Style d'annotation en Gson
  4. et cocher Utiliser les types primitifs, inclure les getters et les setters, autoriser des propriétés supplémentaires
5
Deepak G

Créez ci-dessous la classe dans votre package de modèle:

 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;
}

}

Définissez ci-dessus SponsorsModel dans votre résultat.

Merci

2
Jd Prajapati