Ich möchte JSON-Arrays analysieren und gson verwenden. Erstens kann ich die JSON-Ausgabe protokollieren, der Server reagiert eindeutig auf den Client.
Hier ist meine JSON-Ausgabe:
[
{
id : '1',
title: 'sample title',
....
},
{
id : '2',
title: 'sample title',
....
},
...
]
Ich habe diese Struktur zum Parsen ausprobiert. Eine Klasse, die von Single array
und ArrayList
für alle JSONArray abhängt.
public class PostEntity {
private ArrayList<Post> postList = new ArrayList<Post>();
public List<Post> getPostList() {
return postList;
}
public void setPostList(List<Post> postList) {
this.postList = (ArrayList<Post>)postList;
}
}
Postklasse:
public class Post {
private String id;
private String title;
/* getters & setters */
}
Wenn ich versuche, gson zu verwenden, kein Fehler, keine Warnung und kein Protokoll:
GsonBuilder gsonb = new GsonBuilder();
Gson gson = gsonb.create();
PostEntity postEnt;
JSONObject jsonObj = new JSONObject(jsonOutput);
postEnt = gson.fromJson(jsonObj.toString(), PostEntity.class);
Log.d("postLog", postEnt.getPostList().get(0).getId());
Was ist los, wie kann ich lösen?
Ich suchte nach einer Möglichkeit, Objektarrays allgemeiner zu analysieren. Hier ist mein Beitrag:
CollectionDeserializer.java
::JSONParsingTest.java
::World.java
::quelle
Konvertieren in Object Array
Als Beitragstyp konvertieren
Um es als Liste der Objekte zu lesen, kann TypeToken verwendet werden
quelle
Einige der Antworten in diesem Beitrag sind gültig. Mit TypeToken generiert die Gson-Bibliothek jedoch Baumobjekte mit unwirklichen Typen für Ihre Anwendung.
Um es zu bekommen, musste ich das Array lesen und die Objekte innerhalb des Arrays nacheinander konvertieren. Natürlich ist diese Methode nicht die schnellste und ich empfehle nicht, sie zu verwenden, wenn das Array zu groß ist, aber es hat bei mir funktioniert.
Es ist erforderlich, die Json-Bibliothek in das Projekt aufzunehmen. Wenn Sie auf Android entwickeln, ist es enthalten:
quelle
Überprüfen Sie den Easy-Code für diese Ausgabe
quelle
quelle
Sie können dies in Kotlin einfach mit dem folgenden Code tun:
Grundsätzlich müssen Sie nur eine bieten
Array
vonYourClass
Objekten.quelle
Sie können den Listenwert abrufen, ohne das Type- Objekt zu verwenden.
Ich habe es getestet und es funktioniert.
quelle