반응형
Jackson을 사용하여 어레이에 대한 JSON 문자열을 해석하는 방법
나는 가지고 있다String값은 다음과 같습니다.
[
{
"key1": "value11",
"key2": "value12"
},
{
"key1": "value21",
"key2": "value22"
}
]
그리고 다음 수업:
public class SomeClass {
private String key1;
private String key2;
/* ... getters and setters omitted ...*/
}
그리고 그것을 해석하고 싶다.List<SomeClass>또는SomeClass[]
가장 간단한 방법은 잭슨을 이용해서 ObjectMapper?
드디어 알았어요.
ObjectMapper objectMapper = new ObjectMapper();
TypeFactory typeFactory = objectMapper.getTypeFactory();
List<SomeClass> someClassList = objectMapper.readValue(jsonString, typeFactory.constructCollectionType(List.class, SomeClass.class));
다른 답변은 맞지만, 완성도를 높이기 위해 다음과 같은 다른 방법이 있습니다.
List<SomeClass> list = mapper.readValue(jsonString, new TypeReference<List<SomeClass>>() { });
SomeClass[] array = mapper.readValue(jsonString, SomeClass[].class);
어레이의 완전한 예.construct Array Type()을 construct Collection Type() 또는 필요한 다른 형식으로 바꿉니다.
import java.io.IOException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;
public class Sorting {
private String property;
private String direction;
public Sorting() {
}
public Sorting(String property, String direction) {
this.property = property;
this.direction = direction;
}
public String getProperty() {
return property;
}
public void setProperty(String property) {
this.property = property;
}
public String getDirection() {
return direction;
}
public void setDirection(String direction) {
this.direction = direction;
}
public static void main(String[] args) throws JsonParseException, IOException {
final String json = "[{\"property\":\"title1\", \"direction\":\"ASC\"}, {\"property\":\"title2\", \"direction\":\"DESC\"}]";
ObjectMapper mapper = new ObjectMapper();
Sorting[] sortings = mapper.readValue(json, TypeFactory.defaultInstance().constructArrayType(Sorting.class));
System.out.println(sortings);
}
}
저는 JSONLint.com에서 json을 확인하고 Jackson을 사용하여 이 문제를 해결했습니다.아래는 같은 코드입니다.
Main Class:-
String jsonStr = "[{\r\n" + " \"name\": \"John\",\r\n" + " \"city\": \"Berlin\",\r\n"
+ " \"cars\": [\r\n" + " \"FIAT\",\r\n" + " \"Toyata\"\r\n"
+ " ],\r\n" + " \"job\": \"Teacher\"\r\n" + " },\r\n" + " {\r\n"
+ " \"name\": \"Mark\",\r\n" + " \"city\": \"Oslo\",\r\n" + " \"cars\": [\r\n"
+ " \"VW\",\r\n" + " \"Toyata\"\r\n" + " ],\r\n"
+ " \"job\": \"Doctor\"\r\n" + " }\r\n" + "]";
ObjectMapper mapper = new ObjectMapper();
MyPojo jsonObj[] = mapper.readValue(jsonStr, MyPojo[].class);
for (MyPojo itr : jsonObj) {
System.out.println("Val of getName is: " + itr.getName());
System.out.println("Val of getCity is: " + itr.getCity());
System.out.println("Val of getJob is: " + itr.getJob());
System.out.println("Val of getCars is: " + itr.getCars() + "\n");
}
POJO:
public class MyPojo {
private List<String> cars = new ArrayList<String>();
private String name;
private String job;
private String city;
public List<String> getCars() {
return cars;
}
public void setCars(List<String> cars) {
this.cars = cars;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
} }
RESULT:-
Val of getName is: John
Val of getCity is: Berlin
Val of getJob is: Teacher
Val of getCars is: [FIAT, Toyata]
Val of getName is: Mark
Val of getCity is: Oslo
Val of getJob is: Doctor
Val of getCars is: [VW, Toyata]
언급URL : https://stackoverflow.com/questions/7246157/how-to-parse-a-json-string-to-an-array-using-jackson
반응형
'programing' 카테고리의 다른 글
| 폐지된 관리 대상Query() 문제 (0) | 2022.09.29 |
|---|---|
| 데이터 프레임의 열을 정규화하다 (0) | 2022.09.29 |
| 다음 오류로 인해 super()가 실패합니다.상위 항목이 개체에서 상속되지 않은 경우 TypeError "인수 1은 classobj가 아닌 유형이어야 합니다" (0) | 2022.09.29 |
| URI의 마지막 경로세그먼트를 취득하는 방법 (0) | 2022.09.29 |
| python에서 문자열을 구분 기호로 분할합니다. (0) | 2022.09.27 |