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
'programing' 카테고리의 다른 글
v- for 렌더링 안 함 구성 요소 (0) | 2022.08.16 |
---|---|
기존 vuejs 프로젝트에 typescript 컴포넌트를 추가하려면 어떻게 해야 합니까? (0) | 2022.08.16 |
구조물을 기능으로 전달 (0) | 2022.08.15 |
C의 0에 대한 포인터 참조 해제 (0) | 2022.08.15 |
캐시가 VUE JS 애플리케이션에서 이전 업데이트된 사진을 표시함 (0) | 2022.08.15 |