杰克逊无法解析控制角色

时间:2015-09-15 19:54:02

标签: java json jackson

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

  

com.fasterxml.jackson.core.JsonParseException:非法引用   character((CTRL-CHAR,code 16)):必须使用反斜杠进行转义   包含在字符串值

我调查过并发现Jackson库实际上试图捕获ctrl-char。

有人可以建议解决方案或解决此问题吗?提前谢谢。

3 个答案:

答案 0 :(得分:2)

您是否尝试配置映射器以强制转义非ASCII?

这可能就足够了:

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

请参阅documentation

但我同意StaxMan:JSON响应应格式正确。

答案 1 :(得分:2)

我能够通过在JsonParser上设置Feature.ALLOW_UNQUOTED_CONTROL_CHARS(documentation)来修复类似的问题

我的案例中的代码看起来是:

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

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

答案 2 :(得分:0)

你得到的内容是无效的JSON - 根据JSON规范,控制字符必须在字符串值中转义,并且不能存在于它们之外。所以我建议修改输入数据;它是腐败的,无论谁发送它都不能很好地清理它或正确逃脱。

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