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

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

我有个例外:

由 com.fasterxml.jackson.core 引起 无引号字符((CTRL-CHAR,代码10)) : 必须使用 字符串中包含的反斜杠。

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

有没有办法替换这个或其他解决方案?

200564 次浏览

如果在 JSON 字符串文字中有一个换行符(或其他控制字符) ,就会发生这种情况。

{"foo": "bar
baz"}

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

{"foo": "bar\nbaz"}

吸毒

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 线

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

将 JSON 数据发送到服务器时发生此错误。 也许在字符串中,您试图使用/n 添加新的行字符。

如果添加/before/n,它应该可以工作,您需要转义新的行字符。

"Hello there //n start coding"

结果应该如下

Hello there
start coding

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

解决方案: 在您的文本中存在一个 chr TAB,在将文本放入 json 之前,请将 chr TAB 替换为 t