Ich habe dies in meinem String-Objekt. Jetzt möchte ich es in ein Java-Objekt konvertieren und in der Liste des Java-Objekts speichern. zB In Student-Objekt. Ich verwende den folgenden Code, um ihn in eine Liste von Java-Objekten zu konvertieren: –
ObjectMapper mapper = new ObjectMapper();
StudentList studentList = mapper.readValue(jsonString, StudentList.class);
Meine Listenklasse ist: –
public class StudentList {
private List<Student> participantList = new ArrayList<Student>();
//getters and setters
}
Mein Student-Objekt ist: –
class Student {
String firstName;
String lastName;
//getters and setters
}
Übersehe ich hier etwas? Ich bekomme die folgende Ausnahme: –
Exception : com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of com.aa.Student out of START_ARRAY token
Sie versuchen zu deserialisieren List hinein Student
– Tschüss
16. Juni 2017 um 12:36 Uhr
Speziell: mapper.readValue(jsonString, Student.class) serialisiert einen Schüler, nicht „einen Schüler oder eine Liste von Schülern, wenn der json wie eine Liste aussieht“. Sie sollten eine verwenden TypeReference.
– yshavit
16. Juni 2017 um 12:38 Uhr
@yshavit: -Ich habe die Frage aktualisiert. Das tut mir leid. Bitte schauen Sie sich das noch einmal an.
– Nitesh
16. Juni 2017 um 12:42 Uhr
Ihr JSON sieht nicht so aus {"participantList" : []}. Das ist, was der Fehler Ihnen sagen will
– OneCricketeer
16. Juni 2017 um 12:43 Uhr
Hier ist eine funktionierende Lösung extrahieren Sie Daten aus dem JSON-String-Array
– Mehul Boghra
20. April 2020 um 11:06 Uhr
Manos Nikolaidis
Sie bitten Jackson, a zu analysieren StudentList. Sagen Sie ihm, er soll a analysieren List (von Studenten) statt. Seit List generisch ist, verwenden Sie normalerweise a TypeReference
List<Student> participantJsonList = mapper.readValue(jsonString, new TypeReference<List<Student>>(){});
perfekte Antwort. Funktioniert immer. Aber ich habe eine Anschlussfrage. Was ist, wenn Student POJO eine verschachtelte Hashmap-Struktur hat und jsonString ein Stück hat, das dieser verschachtelten Hashmap zugeordnet werden sollte? Kann jemand sagen, wie ich das erreichen kann?
– old_soul_on_the_run
9. Dezember 2019 um 20:28 Uhr
Nun, ich verstand, was ich erreichen wollte. Ich musste die JSON-Struktur ändern (wozu ich die Freiheit hatte). [ { “id”: “1”, “name”: “XYZ”, “thisHasToBeHashMap” : { “key1” : “value1” , “key2″ :”value2” } }] Diese Struktur wird implizit mit TypeReference> konvertiert
– old_soul_on_the_run
9. Dezember 2019 um 21:09 Uhr
Es kann zu vereinfacht werden List<Student> participantJsonList = mapper.readValue(jsonString, new TypeReference<>(){});
– Kxrr
2. April um 6:34
Sobhan
Für alle, die noch nach Antworten suchen:
1.Hinzufügen jackson-databind Bibliothek zu Ihren Build-Tools wie Gradle oder Maven
2. in Ihrem Code:
ObjectMapper mapper = new ObjectMapper();
List<Student> studentList = new ArrayList<>();
studentList = Arrays.asList(mapper.readValue(jsonStringArray, Student[].class));
Sie können für dieses Szenario auch Gson verwenden.
Gson gson = new Gson();
NameList nameList = gson.fromJson(data, NameList.class);
List<Name> list = nameList.getList();
Ihre NameList-Klasse könnte wie folgt aussehen:
class NameList{
List<Name> list;
//getter and setter
}
Diese Lösung ist einfacher StackOverflow. Es verwenden TypeToken Klasse.
– HRoux
2. Oktober 2018 um 17:23 Uhr
Sie können die folgende Klasse verwenden, um die Liste der Objekte zu lesen. Es enthält eine statische Methode zum Lesen einer Liste mit einem bestimmten Objekttyp. Es sind Jdk8Module-Änderungen enthalten, die auch neue Zeitklassen unterstützen. Es ist eine saubere und generische Klasse.
List<Student> students = JsonMapper.readList(jsonString, Student.class);
StudentList studentList = mapper.readValue(jsonString, new TypeReference<List<Student>>(){});
javaBitte42
Ich habe unten eine Methode erstellt, um dies zu tun jsonArrayToObjectList. Es ist eine praktische statische Klasse, die einen Dateinamen akzeptiert und die Datei ein Array in JSON-Form enthält.
Verwenden Sie den folgenden einfachen Code, es ist keine andere Bibliothek als GSON erforderlich
String list = "your_json_string";
Gson gson = new Gson();
Type listType = new TypeToken<ArrayList<YourClassObject>>() {}.getType();
ArrayList<YourClassObject> users = new Gson().fromJson(list , listType);
“Keine Notwendigkeit, eine Bibliothek zu verwenden” … aber Sie verwenden ganz klar GSON (das oben bereits eine Antwort enthält)?!
– Michael Berry
14. April 2020 um 9:19 Uhr
11863700cookie-checkWie konvertiert man eine JSON-Zeichenfolge in eine Liste von Java-Objekten?yes
Sie versuchen zu deserialisieren
List
hineinStudent
– Tschüss
16. Juni 2017 um 12:36 Uhr
Speziell:
mapper.readValue(jsonString, Student.class)
serialisiert einen Schüler, nicht „einen Schüler oder eine Liste von Schülern, wenn der json wie eine Liste aussieht“. Sie sollten eine verwenden TypeReference.– yshavit
16. Juni 2017 um 12:38 Uhr
@yshavit: -Ich habe die Frage aktualisiert. Das tut mir leid. Bitte schauen Sie sich das noch einmal an.
– Nitesh
16. Juni 2017 um 12:42 Uhr
Ihr JSON sieht nicht so aus
{"participantList" : []}
. Das ist, was der Fehler Ihnen sagen will– OneCricketeer
16. Juni 2017 um 12:43 Uhr
Hier ist eine funktionierende Lösung extrahieren Sie Daten aus dem JSON-String-Array
– Mehul Boghra
20. April 2020 um 11:06 Uhr