source

Jackson JsonNode에서 유형화된 컬렉션으로

manycodes 2023. 3. 7. 21:37
반응형

Jackson JsonNode에서 유형화된 컬렉션으로

잭슨을 변환하는 적절한 방법은 무엇입니까?JsonNodeJAVA 컬렉션으로요?

만약 그것이 json 문자열이었다면ObjectMapper.readValue(String, TypeReference)이 없다면JsonNode유일한 선택지는ObjectMapper.treeToValue(TreeNode, Class)유형화된 컬렉션을 제공하지 않거나ObjectMapper.convertValue(Object, JavaType)개종을 위해 POJO를 받아들여서 기분이 안 좋은 것 같아요.

다른 "올바른" 방법이 있나요? 아니면 이것들 중 하나인가요?

원하는 유형의 컬렉션을 설명하는를 사용하여를 입수합니다.그런 다음 를 사용하여 를 해석합니다(아마도).

예를 들어, 데이터 베이스의List<String>JSON 문자열만 포함하는 JSON 배열에서 제외됩니다.

ObjectMapper mapper = new ObjectMapper();
// example JsonNode
JsonNode arrayNode = mapper.createArrayNode().add("one").add("two");
// acquire reader for the right type
ObjectReader reader = mapper.readerFor(new TypeReference<List<String>>() {
});
// use it
List<String> list = reader.readValue(arrayNode);

반복기가 더 유용하면...

...또한elements()의 방법ArrayNode. 예를 다음에 나타냅니다.

sample.json

{
    "first": [
        "Some string ...",
        "Some string ..."
    ],
    "second": [
        "Some string ..."
    ]
}

그래서...List<String>다음 중 하나 안에 있습니다.JsonNodes.

자바

이 내부 노드를 다음 노드로 변환하는 경우ArrayNode를 사용할 수 있습니다.elements()method: JsonNodes의 반복자를 반환합니다.

File file = new File("src/test/resources/sample.json");
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(file);
ArrayNode arrayNode = (ArrayNode) jsonNode.get("first");
Iterator<JsonNode> itr = arrayNode.elements();
// and to get the string from one of the elements, use for example...
itr.next().asText();

잭슨 오브젝트 맵퍼에 처음 오신 분?

이 튜토리얼이 마음에 들어요.https://www.baeldung.com/jackson-object-mapper-tutorial

업데이트:

를 사용할 수도 있습니다..iterator()의 방법ArrayNode. 똑같습니다.

호출과 동일.elements();는 JSON Array 구성 요소의 루프에 편리한 "각" 루프를 사용할 수 있도록 구현됩니다.

의 자바독에서com.fasterxml.jackson.core:jackson-databind:2.11.0

ObjectMapper.convertValue() 함수는 편리하고 유형을 인식합니다.트리 노드와 Java 유형/컬렉션 간에 광범위한 변환을 수행할 수 있으며, 그 반대의 경우도 가능합니다.

사용 방법의 예를 다음에 나타냅니다.

List<String> list = new ArrayList<>();
list.add("one");
list.add("two");

Map<String,List<String>> hashMap = new HashMap<>();
hashMap.put("myList", list);

ObjectMapper mapper = new ObjectMapper();
ObjectNode objectNode = mapper.convertValue(hashMap, ObjectNode.class);
Map<String,List<String>> hashMap2 = mapper.convertValue(objectNode, new TypeReference<Map<String, List<String>>>() {});

언급URL : https://stackoverflow.com/questions/39237835/jackson-jsonnode-to-typed-collection

반응형