wake-up-neo.net

Wie konvertiert man einen JSON-String in die Liste der Java-Objekte?

Dies ist mein JSON-Array: - 

[ 
    {
        "firstName" : "abc",
        "lastName" : "xyz"
    }, 
    {
        "firstName" : "pqr",
        "lastName" : "str"
    } 
]

Ich habe das in meinem String-Objekt. Jetzt möchte ich es in ein Java-Objekt konvertieren und in der Liste des Java-Objekts speichern. z.B. Im Studentenobjekt ..__ verwende ich 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 Schülerobjekt ist: -

class Student {

    String firstName;
    String lastName;

    //getters and setters
}

Fehlt mir hier etwas? Ich bekomme die Ausnahme: -

Exception : com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of com.aa.Student out of START_ARRAY token
15
Nitesh

Sie bitten Jackson, eine StudentList zu analysieren. Sagen Sie es, stattdessen eine List (von Studenten) zu analysieren. Da List generisch ist, verwenden Sie normalerweise eine TypeReference.

List<Student> participantJsonList = mapper.readValue(jsonString, new TypeReference<List<Student>>(){});
32

Sie können auch Gson für dieses Szenario verwenden.

Gson gson = new Gson();
NameList nameList = gson.fromJson(data, NameList.class);

List<Name> list = nameList.getList();

Ihre NameList-Klasse könnte folgendermaßen aussehen:

class NameList{
 List<Name> list;
 //getter and setter
}
3
Pankaj Jaiswal
StudentList studentList = mapper.readValue(jsonString,StudentList.class);

Ändern Sie dies in dieses

StudentList studentList = mapper.readValue(jsonString, new TypeReference<List<Student>>(){});
0
monstereo

Ich habe dazu eine Methode namens jsonArrayToObjectList erstellt. Es ist eine praktische statische Klasse, die einen Dateinamen akzeptiert und die Datei enthält ein Array in JSON-Form.

 List<Items> items = jsonArrayToObjectList(
            "domain/ItemsArray.json",  Item.class);

    public static <T> List<T> jsonArrayToObjectList(String jsonFileName, Class<T> tClass) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        final File file = ResourceUtils.getFile("classpath:" + jsonFileName);
        CollectionType listType = mapper.getTypeFactory()
            .constructCollectionType(ArrayList.class, tClass);
        List<T> ts = mapper.readValue(file, listType);
        return ts;
    }
0
javaPlease42

Ich habe dieses Problem gelöst, indem ich die POJO-Klasse (Student.class) der JSON-Klasse erstellt habe. Die Hauptklasse wird zum Lesen der Werte aus der JSON-Klasse in dem Problem verwendet.

   **Main Class**

    public static void main(String[] args) throws JsonParseException, 
       JsonMappingException, IOException {

    String jsonStr = "[ \r\n" + "    {\r\n" + "        \"firstName\" : \"abc\",\r\n"
            + "        \"lastName\" : \"xyz\"\r\n" + "    }, \r\n" + "    {\r\n"
            + "        \"firstName\" : \"pqr\",\r\n" + "        \"lastName\" : \"str\"\r\n" + "    } \r\n" + "]";

    ObjectMapper mapper = new ObjectMapper();

    List<Student> details = mapper.readValue(jsonStr, new 
      TypeReference<List<Student>>() {      });

    for (Student itr : details) {

        System.out.println("Value for getFirstName is: " + 
                  itr.getFirstName());
        System.out.println("Value for getLastName  is: " + 
                 itr.getLastName());
    }
}

**RESULT:**
         Value for getFirstName is: abc
         Value for getLastName  is: xyz
         Value for getFirstName is: pqr
         Value for getLastName  is: str


 **Student.class:**

public class Student {
private String lastName;

private String firstName;

public String getLastName() {
    return lastName;
}

public String getFirstName() {
    return firstName;
} }
0
Lucky