web-dev-qa-db-fra.com

Comment convertir une chaîne JSON en liste d'objets Java?

Ceci est mon tableau JSON: - 

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

J'ai ceci dans mon objet String. Maintenant, je veux le convertir en objet Java et le stocker dans la liste des objets Java. par exemple. Dans l'objet Student . J'utilise le code ci-dessous pour le convertir en liste d'objets Java: - 

ObjectMapper mapper = new ObjectMapper();
StudentList studentList = mapper.readValue(jsonString, StudentList.class);

Ma liste de cours est: - 

public class StudentList {

    private List<Student> participantList = new ArrayList<Student>();

    //getters and setters
}

Mon objet étudiant est: -

class Student {

    String firstName;
    String lastName;

    //getters and setters
}

Est-ce que quelque chose me manque ici?

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

Vous demandez à Jackson d'analyser une StudentList. Dites-lui d’analyser plutôt une List (d’élèves). Puisque List est générique, vous utiliserez généralement un TypeReference

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

Vous pouvez également utiliser Gson pour ce scénario.

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

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

Votre classe NameList pourrait ressembler à:

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

Changer ceci en celui-ci

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

J'ai résolu celui-ci en créant la classe POJO (Student.class) du JSON et la classe principale est utilisée pour lire les valeurs du JSON dans le problème.

   **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