9C BLOG

JSON 파싱 오류 해결 본문

STUDY/JAVA

JSON 파싱 오류 해결

티앤모이 2023. 11. 9. 14:07

 

1. 신규 데이터를 받기 위해서 API를 호출하여 JSON Array 를 String으로 받아오게 되어있는데

해당 데이터를 받아서 ObjectMapper로 읽어오다가 에러가 났다.

 

ObjectMapper objMapper = new ObjectMapper();
String plainJson = "~~";	// String 으로 받은 JsonArray
JsonNode listNode = objMapper.readTree(plainJson);

 

com.fasterxml.jackson.databind.JsonMappingException: Illegal unquoted character ((CTRL-CHAR, code 9))

 

readTree에서 JsonArray를 파싱하다가 에러가 난 것 같았다.

데이터 중 뭔가 조금 이상한 것 같은데 찾을 수가 없다ㅜㅜ

 

해결책은 일단 ObjectMapper에 옵션을 주는 것이었다!

 

ObjectMapper objMapper = new ObjectMapper();
String plainJson = "~~";	// String 으로 받은 JsonArray

objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);	// 옵션 추가

JsonNode listNode = objMapper.readTree(plainJson);

 

위의 옵션을 추가하고 나서 다시 실행하니 에러가 해결되었다!!

 

하지만 해당 옵션은 deprecated 되었다고 계속 경고가 떴다,,,,

 

그러면 이제 뭘 써야하냐!!!

대신 이걸로 쓰라고 한다.

 

http://javadox.com/com.fasterxml.jackson.core/jackson-core/2.10.3/deprecated-list.html

 

 

ObjectMapper objMapper = new ObjectMapper();
String plainJson = "~~";	// String 으로 받은 JsonArray

// 옵션 추가 - deprecated 됨
//objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);

// 이제 이걸로 쓰자!
objectMapper.configure(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS, true)

JsonNode listNode = objMapper.readTree(plainJson);

 

그리고 바꾸는 김에 봤더니 해당 JSON을 파싱하는 것부터 바꿔야겠다

 

ObjectMapper objMapper = new ObjectMapper();
String plainJson = "~~";	// String 으로 받은 JsonArray

JSONArray jsonArray = new JSONArray(plainJson);

for(int i=0; i<jsonArray.length(); i++){
	// with로 옵션까지 한 줄로!!
    EduVO eduVO = objectMapper.readerFor(EduVO.class).with(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS).readValue(jsonArray.get(i).toString());
}

 

직접 VO에 set하고 있던데 VO에 필요한 필드로만 생성자를 만들어서 @JsonCreator 어노테이션을 붙여주고

해당 필드 파라미터에 @JsonProperty 어노테이션을 붙여주어 알아서 매핑되도록 하였다.

수십줄의 set하는 코드가 한줄로 끝나버렸다!!!! 휴

@JsonCreator
public EduVO(@JsonProperty("CRS_ID") String crsId){
    this.crsId = crsId;
}

 

https://steemit.com/java/@dongchimi/json

 

Json 파싱 중 오류 모음 — Steemit

com.fasterxml.jackson.databind.JsonMappingException: Illegal unquoted character ((CTRL-CHAR, code 9)): -> 해결책 objectMapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true) 추가. 참고 url : https://stackoverflow.com/questions/31537153/jsonpar

steemit.com

 

'STUDY > JAVA' 카테고리의 다른 글

JSON parsing to class  (0) 2023.11.23
스레드와 프로세스의 차이  (0) 2023.11.03
병렬과 동시성의 차이점을 말해주세요.  (0) 2023.10.30
Java Collections  (0) 2023.10.30
자바 컨테이너란 무엇인가요?  (0) 2023.07.17
Comments