반응형
Jackson을 사용하여 JSON 문자열을 배열로 구문 분석하는 방법
나는이 String
다음과 같은 값 :
[
{
"key1": "value11",
"key2": "value12"
},
{
"key1": "value21",
"key2": "value22"
}
]
그리고 다음 클래스 :
public class SomeClass {
private String key1;
private String key2;
/* ... getters and setters omitted ...*/
}
그리고 그것을 a List<SomeClass>
또는 a 로 구문 분석하고 싶습니다 .SomeClass[]
Jackson 을 사용하여 수행하는 가장 간단한 방법은 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);
배열이있는 완전한 예. " ConstructArrayType () "을 " ConstructCollectionType () "또는 필요한 다른 유형으로 바꿉니다 .
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' 카테고리의 다른 글
프로그래밍 방식으로 컨테이너보기를 추가하는 방법 (0) | 2020.09.06 |
---|---|
sed를 사용하여 줄의 처음 'N'문자를 어떻게 인쇄합니까? (0) | 2020.09.06 |
공백이없는 텍스트를 단어 목록으로 분할하는 방법은 무엇입니까? (0) | 2020.09.06 |
누군가 사용하지 않는 코드를 삭제 (또는 유지)하는 장점을 설명 할 수 있습니까? (0) | 2020.09.06 |
관계 열의 Laravel Eloquent Sum (0) | 2020.09.06 |