我正在尝试使用org.apache.httpcomponents
来使用rest api,它会将json格式的数据发布到api。
我遇到异常
引起:com.fasterxml.jackson.core.JsonParseException:非法 不带引号的字符((CTRL-CHAR,代码10)):必须使用转义 反斜杠包含在字符串中。
原因是ctrl-char
包含在json字符串中。
有没有办法替换它。或者其他解决方案?
谢谢!
答案 0 :(得分:56)
如果在JSON字符串文字中有换行符(或其他控制字符),则会发生这种情况。
{"foo": "bar
baz"}
如果您是生成数据的人,请在创建字符串文字时将实际换行符替换为转义的换行符"\\n"
。
{"foo": "bar\nbaz"}
答案 1 :(得分:37)
使用
mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
请参阅javadoc:
/**
* Feature that determines whether parser will allow
* JSON Strings to contain unquoted 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.
*/
答案 2 :(得分:1)
我建议您使用文本编辑器(如Vim)来查找是否有任何(不可见的)特殊字符或转义字符导致此问题。
或者如果您使用的是Windows,它甚至很简单......只需将代码复制粘贴到Windows记事本中,它很可能会显示任何不可见的不需要的转义字符或换行符等等。修复它们就完成了!
答案 3 :(得分:1)
在Salesforce平台上,此错误是由/
引起的,解决方案是将这些错误转义为//
。
答案 4 :(得分:0)
当您将 JSON 数据发送到服务器时会发生此错误。 也许在您的字符串中,您正尝试使用 /n 添加换行符。
如果在 /n 之前添加 / 应该可以,你需要转义换行符。
"Hello there //n start coding"
结果应该如下
Hello there
start coding