0
jackson을 사용하여 json 객체 및 배열을 deserialize하는 데는 시간이 많이 걸렸지 만 이번에는 다음 객체에 대한 직렬화 해제 방법에 대해 머리를 감쌀 수 없습니다. . 어떻게, 잭슨 또는 기타 JSON 파싱 라이브러리, 직렬화와 수 : 목록, List<Test>
에지도를 사용하여 json 객체의 속성을 deserialize하는 방법
[
{
"name": "x",
"elements": {
"key1": {
"name": "a",
"type": "b"
},
"key2": {
"name": "a",
"type": "b"
}
}
},
{
"name": "y",
"elements": {
"key3": {
"name": "a",
"type": "b"
}
}
}
]
, 테스트는 아래에 정의된다?
public class Test {
public class Element {
public String name;
public String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
public String name;
public Map<String, Element> elements;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Map<String, Element> getElements() {
return elements;
}
public void setElements(Map<String, Element> elements) {
this.elements = elements;
}
}
마지막으로, 내 역 직렬화 코드 : 가능하지 않은 경우
public List<Test> test(final InputStream inputStream) {
List<Test> test = null;
try {
test = mapper.readValue(inputStream, new TypeReference<List<Test>>() { });
} catch (final IOException e) {
log.error("Unable to deserialize json",e);
}
return test;
}
는 어떤 객체 사실에 내 JSON을 역 직렬화 할 수 있습니까? 내가 미리 알 수없는 한 가지는 키의 이름입니다 (이 예에서 key1, key2, key3).
이 방법을 사용하면 예외가 발생하지 않고 널 포인터가 반환됩니다. json 배열에서 "요소"를 제거하면 두 항목의 요소가 모두 null 인 테스트가 크기가 2로 올바르게 설정됩니다 (예상대로). – Lolo
타다 !!! 문제는 Element가 Test 내부의 공용 클래스라는 사실에서 비롯된 것입니다. 대신 Class 요소를 별도의 파일로 작성하여 작동했습니다. 감사. 이 TypeReference를 더 잘 이해해야합니다. – Lolo
아. 비 정적 인 내부 클래스는 외부 클래스의 인스턴스를 요구하기 때문에 문제가 될 수 있습니다 ("암시적인 부모 'this'포인터"). 따라서 일반적으로 사용할 내부 클래스는 '정적'으로 정의됩니다. – StaxMan