web-dev-qa-db-fra.com

Gson - convertit de Json en une ArrayList dactylographiée <T>

À l'aide de la bibliothèque Gson, comment convertir une chaîne JSON en une variable ArrayList d'une classe personnalisée JsonLog? JsonLog est une interface implémentée par différents types de journaux créés par mon application Android - journaux SMS, journaux d'appels, journaux de données - et cette ArrayList est une collection de tous. Je continue à avoir une erreur à la ligne 6.

public static void log(File destination, JsonLog log) {
    Collection<JsonLog> logs = null;
    if (destination.exists()) {
        Gson gson = new Gson();
        BufferedReader br = new BufferedReader(new FileReader(destination));
        logs = gson.fromJson(br, ArrayList<JsonLog>.class); // line 6
        // logs.add(log);
        // serialize "logs" again
    }
}

Il semble que le compilateur ne comprenne pas que je fais référence à une variable ArrayList. Que fais-je?

165
Matthew Quiros

Vous pouvez utiliser TypeToken pour charger la chaîne json dans un objet personnalisé.

logs = gson.fromJson(br, new TypeToken<List<JsonLog>>(){}.getType());
415
Alex

Votre exemple JSON est:

{
    "status": "ok",
    "comment": "",
    "result": {
    "id": 276,
    "firstName": "mohamed",
    "lastName": "hussien",
    "players": [
            "player 1",
            "player 2",
            "player 3",
            "player 4",
            "player 5"
    ]
}

donc si vous voulez sauvegarder une liste de modules dans vos SharedPrefrences, alors:

1- va convertir votre liste de lecteurs retournée au format json en utilisant cette méthode

public static String toJson(Object jsonObject) {
    return new Gson().toJson(jsonObject);
}

2- Sauvegardez-le dans les préférences partagées

PreferencesUtils.getInstance(context).setString("players", toJson((.....ArrayList you want to convert.....)));

3- pour le récupérer à tout moment, obtenez JsonString à partir de préférences partagées comme ça

String playersString= PreferencesUtils.getInstance(this).getString("players");

4- convertir à nouveau en liste 

public static Object fromJson(String jsonString, Type type) {
    return new Gson().fromJson(jsonString, type);
}

ArrayList<String> playersList= (ArrayList<String>) fromJson(playersString,
                    new TypeToken<ArrayList<String>>() {
                    }.getType());

cette solution est également réalisable si vous souhaitez analyser ArrayList of Objects Nous espérons pouvoir vous aider en utilisant Gson Library .

21
Mohamed Hussien

Je ne suis pas sûr à propos de gson, mais voici comment vous le faites avec Jon. Exemple: il doit y avoir une manière similaire en utilisant gson

{ "Joueurs": [ "joueur 1", "joueur 2", "joueur 3", "joueur 4", "joueur 5" ] }

=============================================

import Java.io.FileReader;
import Java.util.List;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public class JosnFileDemo {

    public static void main(String[] args) throws Exception
    {
        String jsonfile ="fileloaction/fileName.json";


                FileReader reader = null;
                JSONObject jsb = null;
                try {
                    reader = new FileReader(jsonfile);
                    JSONParser jsonParser = new JSONParser();
                     jsb = (JSONObject) jsonParser.parse(reader);
                } catch (Exception e) {
                    throw new Exception(e);
                } finally {
                    if (reader != null)
                        reader.close();
                }
                List<String> Players=(List<String>) jsb.get("Players");
                for (String player : Players) {
                    System.out.println(player);
                }           
    }
}
0
arun kongara

Si vous voulez utiliser des tableaux, c'est assez simple.

logs = gson.fromJson(br, JsonLog[].class); // line 6

Fournissez la JsonLog sous forme de tableau JsonLog[].class

0
Ali Asadi