Programing

Jackson에서 JSON 문자열을 JsonNode로 구문 분석하는 방법은 무엇입니까?

lottogame 2020. 4. 24. 08:03
반응형

Jackson에서 JSON 문자열을 JsonNode로 구문 분석하는 방법은 무엇입니까?


너무 간단해야하지만 #embarrasing 한 시간 동안 시도한 후에는 찾을 수 없습니다.

예를 들어 {"k1":v1,"k2":v2}로 구문 분석 된 JSON 문자열을 가져와야합니다 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);

Richard의 대답은 맞습니다. 또는 찾을 위치를 아는 MappingJsonFactory(in org.codehaus.jackson.map)을 만들 수도 있습니다 ObjectMapper. 일반 때문에 당신이있어 오류는 JsonFactory(에서 core패키지)에 대한 종속성이 없습니다 ObjectMapper합니다 (인 mapper패키지).

그러나 일반적으로 다른 저수준 구성 요소를 사용 ObjectMapper하고 걱정하지 않아도 JsonParser됩니다. 스트림의 일부를 데이터 바인딩하거나 저수준 처리를 수행하려는 경우에만 필요합니다.


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

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

반응형