it-swarm.com.de

Gson - Konvertierung von Json in eine typisierte ArrayList <T>

Wie konvertiere ich mithilfe der Gson-Bibliothek eine JSON-Zeichenfolge in eine ArrayList einer benutzerdefinierten Klasse JsonLog? Grundsätzlich ist JsonLog eine Schnittstelle, die durch verschiedene Arten von Protokollen implementiert wird, die von meiner Android-App erstellt werden - SMS-Protokolle, Anrufprotokolle, Datenprotokolle - und diese ArrayList ist eine Sammlung von allen. Ich bekomme immer einen Fehler in Zeile 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
    }
}

Es scheint, dass der Compiler nicht versteht, dass ich mich auf eine typisierte ArrayList beziehe. Was mache ich?

165
Matthew Quiros

Sie können TypeToken verwenden, um den Json-String in ein benutzerdefiniertes Objekt zu laden.

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

Ihr JSON-Beispiel lautet:

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

wenn Sie also eine Arrayliste von Modulen in Ihren SharedPrefrences speichern möchten, gehen Sie folgendermaßen vor:

1- konvertiert Ihre zurückgegebene Arrayliste für das Json-Format mit dieser Methode

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

2- Speichern Sie es in gemeinsam genutzten Prefreneces

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

3- um es jederzeit abzurufen, holen Sie sich JsonString aus den gemeinsamen Voreinstellungen

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

4- konvertieren Sie es erneut in eine Array-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());

diese Lösung ist auch möglich, wenn Sie ArrayList of Objects parsen wollen Hoffe, es hilft Ihnen mit Gson Library .

21
Mohamed Hussien

Ich bin nicht sicher, was das Gson angeht, aber so machen Sie es mit Jon.Sample. Ich hoffe, es muss einen ähnlichen Weg mit Gson geben

{ "Spieler": [ "Spieler 1", "Spieler 2", "Spieler 3", "Spieler 4", "Spieler 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

Wenn Sie Arrays verwenden möchten, ist das ziemlich einfach.

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

Geben Sie die JsonLog als Array an JsonLog[].class

0
Ali Asadi