Java Jackson无法分析控制字符

Java Jackson无法分析控制字符,java,json,jackson,Java,Json,Jackson,在我的API响应中,我有control-p字符。Jackson解析器无法序列化字符并引发错误 com.fasterxml.jackson.core.JsonParseException:非法的无引号 字符((CTRL-CHAR,代码16)):必须使用反斜杠转义到 包含在字符串值中 我已经调查并发现Jackson库实际上试图捕获ctrl char 有人能为此提出解决方案或解决方案吗?提前感谢。您获得的内容不是有效的JSON——根据JSON规范,控制字符必须在字符串值内转义,并且不能存在于字符串值之

在我的API响应中,我有control-p字符。Jackson解析器无法序列化字符并引发错误

com.fasterxml.jackson.core.JsonParseException:非法的无引号 字符((CTRL-CHAR,代码16)):必须使用反斜杠转义到 包含在字符串值中

我已经调查并发现Jackson库实际上试图捕获ctrl char


有人能为此提出解决方案或解决方案吗?提前感谢。

您获得的内容不是有效的JSON——根据JSON规范,控制字符必须在字符串值内转义,并且不能存在于字符串值之外。因此,我建议修复输入数据;它是腐败的,无论是谁派它来,都没有很好地清理它,也没有很好地逃脱


除此之外,您可以编写一个
读取器
(甚至
InputStream
)来过滤或转换所述控制字符。

您是否尝试将映射器配置为强制转义非ASCII字符

这可能就足够了:

mapper.configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true);


但我同意:JSON响应的格式应该很好。

我通过在JsonParser上设置Feature.ALLOW\u UNQUOTED\u CONTROL\u CHARS()解决了类似的问题

我的案例中的代码如下所示:

parser.setFeatureMask(parser.getFeatureMask() | JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS.getMask());

正如其他人所说,这样的JSON是无效的,但如果您没有机会更改JSON,这应该会有所帮助。

谢谢您的回答!我意识到它不是一个有效的JSON,但org.JSON库实际上解析得很好,不像Jackson库。所以我实际上是在寻找一个更复杂的解决方案。然而,我认为你是对的。这可能是我编写自定义Jackson库的唯一方法。不,不是自定义Jackson库,只是清理输入的底层Reader/InputStream。我很惊讶,
org.json
实际上没有检查这一点,因为它试图捕获违反规范的行为。感谢您的回答,但不幸的是,它没有转义控制字符。我同意你们两人的观点,但我对源代码无能为力。如果可能的话,你真的应该尝试对产生格式错误的请求/内容的人提交一个bug。他们可能没有意识到这个问题,如果是这样,就无法解决。我意识到它可能无法解决您眼前的问题,但如果不报告这些问题,这些问题将对每个人都越来越严重。如上所述设置mapper.configure()解决了我的类似问题:我们的用户可能会在UI字符串输入字段(注释等)中输入非ASCII字符。此映射器配置强制转义非ASCII字符(使其无效),从而避免JSONParseException。谢谢