Java JSONParsaging:UTF-8编码:JsonParseException:非法的无引号字符
我试图解析一个json,它是通过Java JSONParsaging:UTF-8编码:JsonParseException:非法的无引号字符,java,json,utf-8,resttemplate,control-characters,Java,Json,Utf 8,Resttemplate,Control Characters,我试图解析一个json,它是通过restemplate从rest服务获得的 当我试图解析包含 新线 或 制表符 它正在引发以下异常: org.codehaus.jackson.JsonParseException: Illegal unquoted character ((CTRL-CHAR, code 13)): has to be escaped using backslash to be included in string value at [Source: java.io.String
restemplate
从rest服务获得的
当我试图解析包含
新线
或
制表符
它正在引发以下异常:
org.codehaus.jackson.JsonParseException: Illegal unquoted character ((CTRL-CHAR, code 13)): has to be escaped using backslash to be included in string value
at [Source: java.io.StringReader@a8f373; line: 1, column: 663]
at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1433)
at org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:521)
at org.codehaus.jackson.impl.JsonParserMinimalBase._throwUnquotedSpace(JsonParserMinimalBase.java:482)
at org.codehaus.jackson.impl.ReaderBasedParser._skipString(ReaderBasedParser.java:1416)
at org.codehaus.jackson.impl.ReaderBasedParser.nextToken(ReaderBasedParser.java:366)
at com.demo.myapp.JsonParsingUtil.parseJson(JsonParsingUtil.java:67) at java.lang.Thread.run(Thread.java:745)
代码在我的本地服务器上运行良好。[Windows操作系统,Jboss服务器]
当我在[Linux操作系统、Jboss服务器中部署代码时,会弹出此解析异常
问题是
- 用户在windows环境中通过webapp输入一些数据李>
- 我通过rest服务访问数据
- 数据被解析以检索一些信息和用这些信息创建的新json,并传递给其他团队
JsonFactory jsonFactory = new MappingJsonFactory();
JsonParser jsonParser = jsonFactory.createJsonParser(jsonString);
jsonParser.configure(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true);
jsonParser.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
我也试过了
byte[] byteArray = jsonData.getBody().getBytes();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(byteArray.length);
byteArrayOutputStream.write(byteArray, 0, byteArray.length);
jsonString = new String(byteArray, Charset.forName("UTF-8"));
而且
我在RestTemplate对象中设置了UTF-8编码,用于从rest服务获取json
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
因为我的json包含大量的{key:values}
,所以使用JsonGenerator
是不可行的选择。我希望有人能给我指出解决这个问题的正确方向
请查找我使用的代码:
JsonFactory jsonFactory = new MappingJsonFactory();
JsonParser jsonParser = jsonFactory.createJsonParser(jsonString);
jsonParser.configure(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true);
jsonParser.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
while (!jsonParser.isClosed()) {
JsonToken jsonToken = jsonParser.nextToken();
if (JsonToken.FIELD_NAME.equals(jsonToken)) {
String fieldName = jsonParser.getCurrentName();
if (fieldName.equals("Comments")) {
String code = jsonParser.nextTextValue();
}
}
}
而jsonString
从rest模板中获取
{"Comments":"Approved.
Please proceed"}
那是
批准。换行字符,请继续
注意:我正在使用codehaus jackson-1.9.13库进行json解析并没有回答您的实际问题,但您可能希望将jackson升级到更新的版本。它已经有一段时间没有出现在codehaus上了。另外,您可能想分享一个负载解析失败的最小示例。@Mena我已经用代码和示例输入更新了我的问题。我的经理可能会反对换到其他杰克逊图书馆。但是所有的输入都是受欢迎的:)您的JSON负载看起来是无效的。要使用换行符或换行符,您可以转义该值,例如使用
%0A
或\n
等。我已尝试将所有“\\r\\n”替换为“\n”,但似乎不起作用。json也是来自第三方的,我收到的是上面给出的。