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?
Sie können TypeToken verwenden, um den Json-String in ein benutzerdefiniertes Objekt zu laden.
logs = gson.fromJson(br, new TypeToken<List<JsonLog>>(){}.getType());
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 .
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);
}
}
}
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