JsonParsing:UTF-8编码:JsonParseException:非法引用的字符

时间:2016-11-21 13:08:54

标签: java json utf-8 resttemplate control-characters

我正在尝试解析通过RestTemplate从休息服务获得的json。

当我尝试解析包含

的json时
  

换行

  

制表符

它抛出以下异常:

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 OS,Jboss服务器]中部署代码时,会弹出此解析异常

问题场景是,

  • 用户在Windows环境中通过webapp输入一些数据。
  • 我通过休息服务
  • 访问数据
  • 解析数据以检索一些信息,并使用该信息创建新的json并传递给其他团队。

我正在使用JsonParser来解析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编码,该对象用于从休息服务获取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();
                }
            }
        }

从{rest>模板获取jsonString

{"Comments":"Approved.
            Please proceed"}

  

批准。 NewLine Char请继续

注意:我正在使用codehaus jackson-1.9.13库进行JsonParsing

0 个答案:

没有答案