JsonNode를 POJO로 변환
이것은 조금 특이하게 보일 수 있지만, 저는 효율적인 변환/매핑 방법을 찾고 있습니다.JsonNode
에POJO
.
모델 정보 중 일부를 json 파일에 저장하기 때문에 몇 가지 버전의 모델을 지원해야 합니다.
Json Node의 메모리에 json 파일을 로드하고 최신 버전의 모델과 일치하도록 몇 가지 버전 전략을 적용합니다.
ObjectMapper mapper = new ObjectMapper();
BufferedReader fileReader = new BufferedReader(new FileReader(projPath));
JsonNode rootNode = mapper.readTree(fileReader);
//Upgrade our file in memory
applyVersioningStrategy(rootNode);
ProjectModel project = mapJsonNodeToProject(rootNode);
더 빠른 방법이 없는 한, 저는 아마도 단순히 수동으로 이 시스템을 적용하게 될 것입니다.JsonNodes
마이모델로
잭슨 2.4에서는 다음과 같이 변환할 수 있습니다.
MyClass newJsonNode = jsonObjectMapper.treeToValue(someJsonNode, MyClass.class);
어디에jsonObjectMapper
Jackson이다.ObjectMapper
.
잭슨의 이전 버전에서는
MyClass newJsonNode = jsonObjectMapper.readValue(someJsonNode, MyClass.class);
이렇게 하면 효과가 있습니다.
mapper.readValue(fileReader, MyClass.class);
제가 그걸 사용하는 이유는String
, 가 아닙니다.BufferedReader
그래도 잘 될 거야
제 코드는 다음과 같습니다.
String inputString = // I grab my string here
MySessionClass sessionObject;
try {
ObjectMapper objectMapper = new ObjectMapper();
sessionObject = objectMapper.readValue(inputString, MySessionClass.class);
다음은 해당 문의에 대한 공식 문서입니다. http://jackson.codehaus.org/1.7.9/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(java.lang문자열, java.lang.클래스)
커스텀 디시리얼라이저를 정의할 수도 있습니다.ObjectMapper
: http://wiki.fasterxml.com/JacksonHowToCustomDeserializers
편집: 방금 다른 것이 생각났습니다.착신하는 객체의 속성이 다음 값보다 클 경우POJO
설정하려는 추가 정보는 무시해야 합니다.
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
그렇지 않으면 설정할 속성을 찾을 수 없다는 오류가 표시됩니다.
org.codehouse.jackson을 사용하는 경우 1.6부터 가능합니다.JsonNode를 POJO로 변환할 수 있습니다.ObjectMapper#readValue
: http://jackson.codehaus.org/1.9.4/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(org.codehaus.jackson.JsonNode, java.lang.클래스)
ObjectMapper mapper = new ObjectMapper();
JsonParser jsonParser = mapper.getJsonFactory().createJsonParser("{\"foo\":\"bar\"}");
JsonNode tree = jsonParser.readValueAsTree();
// Do stuff to the tree
mapper.readValue(tree, Foo.class);
String jsonInput = "{ \"hi\": \"Assume this is the JSON\"} ";
com.fasterxml.jackson.databind.ObjectMapper mapper =
new com.fasterxml.jackson.databind.ObjectMapper();
MyClass myObject = objectMapper.readValue(jsonInput, MyClass.class);
의 JSON 입력이 POJO보다 더 많은 속성을 가지고 있고 Jackson 2.4의 추가 속성을 무시하고 싶다면 다음과 같이 Object Mapper를 설정할 수 있습니다.이 구문은 이전 Jackson 버전과는 다릅니다.(잘못된 구문을 사용하면 아무 작업도 하지 않습니다.)
mapper.disable(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
이 방법은 다른 방법으로 객체 배열에 사용할 수 있습니다.
ObjectReader reader = mapper.readerFor(new TypeReference<List<SomeClass>>() {
});
assert someJsonNode.isArray()
List<SomeClass> list = reader.readValue(someJsonNode);
언급URL : https://stackoverflow.com/questions/19711695/convert-jsonnode-into-pojo
'programing' 카테고리의 다른 글
C#의 #region에 해당하는 Java (0) | 2022.08.27 |
---|---|
Java에서 기존 파일에 텍스트를 추가하는 방법 (0) | 2022.08.27 |
VUE JS의 커서 위치에 문자 삽입 (0) | 2022.08.27 |
Q: Vuex-module-decorator:농담을 사용하여 Vuex 액션을 테스트하는 방법 (0) | 2022.08.18 |
VueJ, Vuex 및 복잡한 상태 (0) | 2022.08.18 |