Jackson objectMapper.writeValue()将值更改为" \ u0000"

时间:2016-09-06 22:49:49

标签: java json jackson

我在我的代码中使用了杰克逊的JSON解析库(2.6.0),当我在一个节点上调用writeValue时,我发现了一个奇怪的问题超过1000个字符的字符串。它不像往常一样编写String,而是用String" \ u0000"替换每个字符。

此代码按我的意图运行,输出{"problem":"aaaaaaaa...a"}

public void passingMethod() throws IOException {
    StringBuilder builder = new StringBuilder();
    for(int i = 0; i < 1000; i++){
        builder.append("a");
    }

    ObjectMapper mapper = new ObjectMapper();
    ObjectNode node = mapper.createObjectNode();
    node.put("problem", builder.toString());
    mapper.writeValue(System.out, node);
}

通过将i的范围更改为1001而不是1000,输出更改为{"problem":"\u0000\u0000\u0000...\u0000"}

public void failingMethod() throws IOException {
    StringBuilder builder = new StringBuilder();
    for(int i = 0; i < 1001; i++){
        builder.append("a");
    }

    ObjectMapper mapper = new ObjectMapper();
    ObjectNode node = mapper.createObjectNode();
    node.put("problem", builder.toString());
    mapper.writeValue(System.out, node);
}

(注意:通常情况下,我会使用基础ObjectOutputStream写入FileOutputStream,而不是写入System.out。)

由于我看到了这个错误,尝试使用不同类型的类来写入文件,因为我通过一个文件写入文件,所以我没有看到这个问题。 FileWriter,但任何类型的OutputStream都会重现问题,我需要能够使用ObjectOutputStream。

如果我是从未初始化的char[]读取的话,输出看起来很像我期望的那样,但我不知道这实际上是不是在这里发生了什么,更不用说如何解决它。任何建议都会非常感激。

谢谢。

0 个答案:

没有答案