116 votes

Utilisation de GSON pour analyser un tableau JSON

J'ai un fichier JSON comme celui-ci :

[
    {
        "number": "3",
        "title": "hello_world",
    }, {
        "number": "2",
        "title": "hello_world",
    }
]

Avant, quand les fichiers avaient un élément racine, je l'utilisais :

Wrapper w = gson.fromJson(JSONSTRING, Wrapper.class);

mais je n'arrive pas à trouver comment coder les Wrapper car l'élément Root est un tableau.

J'ai essayé d'utiliser :

Wrapper[] wrapper = gson.fromJson(jsonLine, Wrapper[].class);

avec :

public class Wrapper{

    String number;
    String title;

}

Mais je n'ai pas eu de chance. Comment puis-je le lire autrement en utilisant cette méthode ?

P.S. J'ai réussi à le faire fonctionner en utilisant :

JsonArray entries = (JsonArray) new JsonParser().parse(jsonLine);
String title = ((JsonObject)entries.get(0)).get("title");

Mais je préférerais savoir comment le faire (si possible) avec les deux méthodes.

117voto

Pshemo Points 34648

Le problème est causé par la virgule à la fin de (dans votre cas chaque ) objet JSON placé dans le tableau :

{
    "number": "...",
    "title": ".." ,  //<- see that comma?
}

Si vous les supprimez, vos données deviendront

[
    {
        "number": "3",
        "title": "hello_world"
    }, {
        "number": "2",
        "title": "hello_world"
    }
]

y

Wrapper[] data = gson.fromJson(jElement, Wrapper[].class);

devrait fonctionner correctement.

43voto

Narendra Pathai Points 12172
Gson gson = new Gson();
Wrapper[] arr = gson.fromJson(str, Wrapper[].class);

class Wrapper{
    int number;
    String title;       
}

Il semble que cela fonctionne bien. Mais il y a un supplément , Virgule dans votre chaîne.

[
    { 
        "number" : "3",
        "title" : "hello_world"
    },
    { 
        "number" : "2",
        "title" : "hello_world"
    }
]

17voto

chenyueling Points 171
public static <T> List<T> toList(String json, Class<T> clazz) {
    if (null == json) {
        return null;
    }
    Gson gson = new Gson();
    return gson.fromJson(json, new TypeToken<T>(){}.getType());
}

appel type :

List<Specifications> objects = GsonUtils.toList(products, Specifications.class);

2voto

shahzeb khan Points 21
Wrapper[] data = gson.fromJson(jElement, Wrapper[].class);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X