JsonParseException:非法的未加引号的字符((CTRL-CHAR,代码10)


93

我正在尝试使用org.apache.httpcomponentsRest API,它将把JSON格式的数据发布到API。

我得到这个异常:

引起原因:com.fasterxml.jackson.core.JsonParseException:非法的不带引号的字符((CTRL-CHAR,代码10)):必须使用反斜杠转义以包含在字符串中。

原因是因为ctrl-char包含在JSON字符串中。

有什么方法可以替代此解决方案或其他解决方案吗?


1
您是自己创建JSON吗?基本上,这听起来好像您的数据已损坏……因此,如果可以的话,请对其进行修复,或者向产生该文件的任何人投诉。
乔恩·斯基特

1
本StackOverflow答案中所述,您的JSON是否可以通过jsonlint.com正确验证?
埃里克·麦考密克

Intellij idea在打开.json文件后立即对其进行验证。试试吧!
加拉夫

Answers:


83

如果您在JSON字符串文字中包含换行符(或其他控制字符),则会发生这种情况。

{"foo": "bar
baz"}

如果您是生成数据的人,请"\\n"在创建字符串文字时将实际的换行符替换为转义的换行符。

{"foo": "bar\nbaz"}

55

使用

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线程


如何在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'5

您为什么不尝试以下方法:stackoverflow.com/questions/5349362/…或覆盖该bean:MappingJackso‌n2HttpMessageConvert‌er
hoang

@hoang在尝试捕获此非法数据时在Java中将其删除的地方,我问了一个问题,这里是stackoverflow.com/questions/49676720/…,请您帮我一下。
Vipul Singh '18

谢谢真的很有用,我用的是进口: com.fasterxml.jackson.core.JsonParser.Feature;
赫苏斯·桑切斯

1

在Salesforce平台上,此错误是由引起的/,解决方案是将这些错误转义为//


2
对于我-在Salesforce平台上-实际需要的是“ \”到“ \\”。至少就我而言,它是由于JSON中的换行符而发生的。\n必须更改为\\n。这是由于JSON要求转义控制字符。在这里看到这个出色的评论。
马尔特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.