web-dev-qa-db-fra.com

Comment analyser un tableau JSON (pas un objet Json) dans Android

J'ai du mal à trouver un moyen d'analyser JSONArray. Cela ressemble à ceci:

[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"},...]

Je sais comment l'analyser si le JSON a été écrit différemment (en d'autres termes, si l'objet json était renvoyé au lieu d'un tableau d'objets). Mais c'est tout ce que j'ai et je dois y aller.

* EDIT: C'est un json valide. J'ai créé une application iPhone avec ce JSON. Maintenant, je dois le faire pour Android et je n'arrive pas à le comprendre. Il existe de nombreux exemples, mais ils sont tous liés à JSONObject. J'ai besoin de quelque chose pour JSONArray.

Quelqu'un peut-il me donner un indice, un tutoriel ou un exemple?

Très appréciée !

78
SteBra

utilisez l'extrait suivant pour analyser le JsonArray.

JSONArray jsonarray = new JSONArray(jsonStr);
for (int i = 0; i < jsonarray.length(); i++) {
    JSONObject jsonobject = jsonarray.getJSONObject(i);
    String name = jsonobject.getString("name");
    String url = jsonobject.getString("url");
}

J'espère que ça aide.

130
Spring Breaker

Je vais juste donner un petit exemple Jackson :

Commencez par créer un support de données contenant les champs de la chaîne JSON.

// imports
// ...
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyDataHolder {
    @JsonProperty("name")
    public String mName;

    @JsonProperty("url")
    public String mUrl;
}

Et analyser la liste de MyDataHolders

String jsonString = // your json
ObjectMapper mapper = new ObjectMapper();
List<MyDataHolder> list = mapper.readValue(jsonString, 
    new TypeReference<ArrayList<MyDataHolder>>() {});

Utiliser les éléments de la liste

String firstName = list.get(0).mName;
String secondName = list.get(1).mName;
25
vilpe89
public static void main(String[] args) throws JSONException {
    String str = "[{\"name\":\"name1\",\"url\":\"url1\"},{\"name\":\"name2\",\"url\":\"url2\"}]";

    JSONArray jsonarray = new JSONArray(str);


    for(int i=0; i<jsonarray.length(); i++){
        JSONObject obj = jsonarray.getJSONObject(i);

        String name = obj.getString("name");
        String url = obj.getString("url");

        System.out.println(name);
        System.out.println(url);
    }   
}   

Sortie:

name1
url1
name2
url2
19
Maxim Shoustin

Créez une classe pour contenir les objets.

public class Person{
   private String name;
   private String url;
   //Get & Set methods for each field
}

Puis désérialiser comme suit:

Gson gson = new Gson();
Person[] person = gson.fromJson(input, Person[].class); //input is your String

Article de référence: http://blog.patrickbaumann.com/2011/11/gson-array-deserialization/

11
Kevin Bowersox

Dans cet exemple, il y a plusieurs objets dans un tableau JSON. C'est,

Voici le tableau json: [{"name": "name1", "url": "url1"}, {"name": "name2", "url": "url2"}, ...]

Ceci est un objet: {"name": "name1", "url": "url1"}

En supposant que vous obteniez le résultat sous la forme d'une variable String appelée jSonResultString:

JSONArray arr = new JSONArray(jSonResultString);

  //loop through each object
  for (int i=0; i<arr.length(); i++){

  JSONObject jsonProductObject = arr.getJSONObject(i);
  String name = jsonProductObject.getString("name");
  String url = jsonProductObject.getString("url");


}
5
TharakaNirmana

@Stebra Voir cet exemple. Cela peut vous aider.

public class CustomerInfo 
{   
    @SerializedName("customerid")
    public String customerid;
    @SerializedName("picture")
    public String picture;

    @SerializedName("location")
    public String location;

    public CustomerInfo()
    {}
}

Et quand vous obtenez le résultat; analyser comme ça

List<CustomerInfo> customers = null;
customers = (List<CustomerInfo>)gson.fromJson(result, new TypeToken<List<CustomerInfo>>() {}.getType());
3
nilkash

Quelques bonnes suggestions sont déjà mentionnées. Utiliser GSON est vraiment pratique, et pour vous simplifier la vie, vous pouvez essayer ceci site web Il s’appelle jsonschema2pojo et fait exactement cela:

Vous lui donnez votre JSON et il génère un objet Java pouvant être collé dans votre projet. Vous pouvez sélectionner GSON pour annoter vos variables, ainsi l'extraction de l'objet de votre json devient encore plus facile!

2
TomCB

Mon cas, exemple de charge de serveur ..

int jsonLength = Integer.parseInt(jsonObject.getString("number_of_messages"));
            if (jsonLength != 1) {
                for (int i = 0; i < jsonLength; i++) {
                    JSONArray jsonArray = new JSONArray(jsonObject.getString("messages"));
                    JSONObject resJson = (JSONObject) jsonArray.get(i);
                    //addItem(resJson.getString("message"), resJson.getString("name"), resJson.getString("created_at"));
                }

J'espère que ça aide

1
bong jae choe