programing

Jackson에서 JSON 문자열을 JsonNode로 해석하려면 어떻게 해야 합니까?

bestcode 2022. 8. 16. 23:21
반응형

Jackson에서 JSON 문자열을 JsonNode로 해석하려면 어떻게 해야 합니까?

아주 간단해야 하는데, 한 시간 동안 시도해도 찾을 수가 없어요.

예를 들어 JSON 문자열을 가져와야 합니다.{"k1":v1,"k2":v2}, 로 해석됩니다.JsonNode.

JsonFactory factory = new JsonFactory();
JsonParser jp = factory.createJsonParser("{\"k1\":\"v1\"}");
JsonNode actualObj = jp.readValueAsTree();

주다

java.lang.IllegalStateException: No ObjectCodec defined for the parser, can not deserialize JSON into JsonNode tree

Richards의 답변에 약간의 변화가 있지만readTree에서는 문자열을 사용할 수 있기 때문에, 다음과 같이 간단하게 할 수 있습니다.

ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readTree("{\"k1\":\"v1\"}");

를 사용해야 합니다.ObjectMapper:

ObjectMapper mapper = new ObjectMapper();
JsonFactory factory = mapper.getJsonFactory(); // since 2.1 use mapper.getFactory() instead
JsonParser jp = factory.createJsonParser("{\"k1\":\"v1\"}");
JsonNode actualObj = mapper.readTree(jp);

파서 작성에 대한 자세한 내용은 여기를 참조하십시오.

세 번째 변형:

ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readValue("{\"k1\":\"v1\"}", JsonNode.class);

리처드의 답은 옳다.다른 방법으로,MappingJsonFactory(인org.codehaus.jackson.map)를 사용하여 위치를 알 수 있습니다.ObjectMapper당신이 받은 오류는 정규적인 것이었기 때문입니다.JsonFactory(출처:core패키지)에 의존하지 않습니다.ObjectMapper(그것은mapper패키지)

하지만 보통 당신은 그냥ObjectMapper그리고 걱정하지 마세요JsonParser또는 기타 하위 수준 구성요소 - 스트림의 일부를 데이터 수집하거나 하위 수준 처리를 수행할 때 필요합니다.

import com.github.fge.jackson.JsonLoader;
JsonLoader.fromString("{\"k1\":\"v1\"}")
== JsonNode = {"k1":"v1"}

오래된 질문에 대한 새로운 접근법.Java 9+에서 작동하는 솔루션

ObjectNode agencyNode = new ObjectMapper().valueToTree(Map.of("key", "value"));

가독성이 뛰어나고 복잡한 오브젝트에서도 유지보수가 용이합니다.EJ

Map<String, Object> agencyMap = Map.of(
        "name", "Agencia Prueba",
        "phone1", "1198788373",
        "address", "Larrea 45 e/ calligaris y paris",
        "number", 267,
        "enable", true,
        "location", Map.of("id", 54),
        "responsible", Set.of(Map.of("id", 405)),
        "sellers", List.of(Map.of("id", 605))
);
ObjectNode agencyNode = new ObjectMapper().valueToTree(agencyMap);

언급URL : https://stackoverflow.com/questions/3653996/how-to-parse-a-json-string-into-jsonnode-in-jackson

반응형