Как преобразовать строку JSON в объект списка Java?
Это мой массив JSON: -
[
{
"firstName" : "abc",
"lastName" : "xyz"
},
{
"firstName" : "pqr",
"lastName" : "str"
}
]
У меня это в моем объекте String. Теперь я хочу преобразовать его в объект Java и сохранить его в списке объектов java. например В объекте Студент.
Я использую ниже код, чтобы преобразовать его в объект List of Java: -
ObjectMapper mapper = new ObjectMapper();
StudentList studentList = mapper.readValue(jsonString, StudentList.class);
Мой класс списка: -
public class StudentList {
private List<Student> participantList = new ArrayList<Student>();
//getters and setters
}
Мой объект Student: -
class Student {
String firstName;
String lastName;
//getters and setters
}
Я что-то упустил?
Я получаю ниже исключения: -
Exception : com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of com.aa.Student out of START_ARRAY token
Ответы
Ответ 1
Вы просите Джексона проанализировать StudentList
. Скажите это, чтобы проанализировать List
(студентов) вместо этого. Поскольку List
является универсальным, вы обычно будете использовать TypeReference
List<Student> participantJsonList = mapper.readValue(jsonString, new TypeReference<List<Student>>(){});
Ответ 2
Вы также можете использовать Gson для этого сценария.
Gson gson = new Gson();
NameList nameList = gson.fromJson(data, NameList.class);
List<Name> list = nameList.getList();
Ваш класс NameList может выглядеть так:
class NameList{
List<Name> list;
//getter and setter
}
Ответ 3
Вы можете просто конвертировать с помощью Gson
ArrayList results = new Gson(). FromJson (arrayOfJsonObject, ArrayList.class);
Или вы можете получить его как список, как показано ниже
Список результатов = Arrays.AsList(new Gson(). FromJson (arrayOfJsonObject, ArrayList.class));
Ответ 4
StudentList studentList = mapper.readValue(jsonString,StudentList.class);
Измени это на это
StudentList studentList = mapper.readValue(jsonString, new TypeReference<List<Student>>(){});
Ответ 5
Я решил эту проблему, создав класс POJO (Student.class) из JSON, а основной класс используется для чтения значений из JSON в задаче.
**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;
} }
Ответ 6
Я сделал метод для этого ниже под названием jsonArrayToObjectList
. Это удобный статический класс, который принимает имя файла, а файл содержит массив в форме JSON.
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;
}