web-dev-qa-db-fra.com

Convertir une chaîne en JsonArray

comment convertir correctement cette chaîne en un jsonArray?

{
    "myArray": [
    {   "id": 1,
        "att1": 14.2,
        "att2": false },
    {   "id": 2,
        "att1": 13.2,
        "att2": false },
    {   "id": 3,
        "att1": 13,
        "att2": false }
  ]}

Un JSONArray jArray = new JSONArray(STRING_FROM_ABOVE); résulte en jArray.length = 1 C'est la première fois que je contacte json :)

7
DieselPower

Essaye ça :

JSONObject jObject = new JSONObject(STRING_FROM_ABOVE);
JSONArray jArray = jObject.getJSONArray("myArray");

"String_from_above" n'est pas un tableau Json, c'est un objet Json contenant un attribut (myArray) qui est un tableau Json;)

Vous pouvez alors faire:

for (int i = 0; i < jArray.length(); i++) {
        JSONObject jObj = jArray.getJSONObject(i);
        System.out.println(i + " id : " + jObj.getInt("id"));
        System.out.println(i + " att1 : " + jObj.getDouble("att1"));
        System.out.println(i + " att2 : " + jObj.getBoolean("att2"));
}
10
Organ

Lors de l'analyse, ajoutez des valeurs aux objets et aux ArrayLists ou à la manière dont vous souhaitez les utiliser. Bonne chance. 

JSONObject jo = new JSONObject(STRING_FROM_ABOVE);
JSONArray rootArray= jo.getJSONArray("myArray");
int rootArrayLength=rootArray.length();
for(int i=0;i<rootArrayLength;i++){
   int id=   rootArray.getJSONObject(i).getInt("id");
   // do same for others too and create an object
}
// create object and make a list
2
canova

Juste pour ajouter une autre méthode, je vous recommande de jeter un oeil à Gson . Gson est une bibliothèque qui facilite la sérialisation et la désérialisation d'objets Java. Par exemple, avec votre chaîne, vous pouvez faire ceci:

// Declare these somewhere that is on the classpath
public class ArrayItem{
    public int id;
    public double att1;
    public boolean att2;
}

public class Container{
    public List<ArrayItem> myArray;
}

// In your code
Gson gson = new Gson();

Container container = gson.fromJson(json, Container.class);

for(ArrayItem item : container.myArray){
    System.out.println(item.id);  // 1, 2, 3
    System.out.println(item.att1);  // 14.2, 13.2, 13.0
    System.out.println(item.att2);  // false, false, false
}

De même, vous pouvez très facilement faire marche arrière.

String jsonString = gson.toJson(container);
// jsonString no contains something like this:
// {"myArray":[{"id":1,"att1":14.2,"att2":false},{"id":2,"att1":13.2,"att2":false},{"id":3,"att1":13.0,"att2":false}]}

Le principal avantage de l'utilisation de quelque chose comme Gson est que vous pouvez désormais utiliser tous les contrôles de type de Java par défaut, au lieu d'avoir à gérer vous-même les noms et types d'attributs. Il vous permet également de faire des choses fantaisistes telles que la réplication de hiérarchies de types qui permettent de gérer un grand nombre de messages json en un tournemain. Cela fonctionne très bien avec Android, et le pot lui-même est minuscule et ne nécessite aucune dépendance supplémentaire.

1
TwentyMiles

Jetez un coup d’œil à JQuery, et en particulier à la fonction Parse. Cela analysera directement un tableau Json dans un objet.

0
PizzaTheHut