JsonParseException : 인용되지 않은 잘못된 문자 ((CTRL-CHAR, 코드 10)


94

org.apache.httpcomponentsJSON 형식 데이터를 API에 게시하는 Rest API 를 사용하려고합니다 .

이 예외가 발생합니다.

원인 : com.fasterxml.jackson.core.JsonParseException : 따옴표없는 잘못된 문자 ((CTRL-CHAR, 코드 10)) : 문자열에 포함 되려면 백 슬래시를 사용하여 이스케이프해야합니다.

그 이유는 ctrl-charJSON 문자열에이 포함되어 있기 때문 입니다.

이 솔루션이나 다른 솔루션을 대체 할 방법이 있습니까?


1
JSON을 직접 만들고 있습니까? 기본적으로 손상된 데이터가있는 것 같습니다. 가능하면 수정하거나 데이터를 생성하는 사람에게 불평하십시오.
Jon Skeet

1
이 StackOverflow 답변 에서 논의했듯이 JSON이 jsonlint.com을 통해 올바르게 유효성을 검사 합니까?
Eric McCormick

Intellij 아이디어는 .json 파일을 열 자마자 유효성을 검사합니다. 시도 해봐!
Gaurav

답변:


84

JSON 문자열 리터럴에 개행 문자 (또는 기타 제어 문자)가있는 경우 이러한 상황이 발생할 수 있습니다.

{"foo": "bar
baz"}

데이터를 생성하는 사람이라면 "\\n"문자열 리터럴을 만들 때 실제 줄 바꿈을 이스케이프 처리 된 줄로 바꾸 십시오.

{"foo": "bar\nbaz"}

56

사용

mapper.configure(
    JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS.mappedFeature(), 
    true
);

javadoc 참조 :

/**
 * Feature that determines whether parser will allow
 * JSON Strings to contain unescaped control characters
 * (ASCII characters with value less than 32, including
 * tab and line feed characters) or not.
 * If feature is set false, an exception is thrown if such a
 * character is encountered.
 *<p>
 * Since JSON specification requires quoting for all control characters,
 * this is a non-standard feature, and as such disabled by default.
 */

이전 옵션 JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS은 2.10부터 더 이상 사용되지 않습니다.

github thread 도 참조하십시오 .


이것을 XML로 구현하는 방법은 무엇입니까? 나는 <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="serializationInclusion" value="NON_NULL"/> </bean> </property> <property name="supportedMediaTypes" value="application/json"/> </bean> </mvc:message-converters> </mvc:annotation-driven> . Jackson 2.7을 사용하고 있습니다. 및 Spring4.3.2
SudeepShakya

당신은 이것을 시도해 보지 않겠습니까 : stackoverflow.com/questions/5349362/… 또는 그 빈을 재정의 : MappingJackso‌ n2HttpMessageConvert‌ er
hoang

@hoang이 불법 데이터를 캡처하려고 할 때 Java에서 이것을 어디로 처리해야합니까? 여기에있는 질문을 했습니다. stackoverflow.com/questions/49676720/… , 제발 도와주세요.
Vipul Singh 2018

정말 유용 해 주셔서 감사합니다. 내가 사용한 가져 ​​오기는 다음과 같습니다. com.fasterxml.jackson.core.JsonParser.Feature;
Jesús Sánchez

1

Salesforce 플랫폼에서이 오류는으로 인해 발생 /하며 해결 방법은 //.


2
저에게는 Salesforce 플랫폼에서 실제로 필요한 것은 "\"에서 "\\"까지였습니다. 적어도 제 경우에는 JSON의 줄 바꿈 문자로 인해 발생했습니다. \n로 변경해야 \\n합니다. 이는 JSON이 제어 문자를 이스케이프해야한다는 사실 때문입니다. 여기 에서이 훌륭한 주석을 참조 하십시오 .
malte
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.