为什么ObjectNode在Json String中添加反斜杠

时间:2018-09-18 21:29:50

标签: java string object jackson jackson2

这是我尝试将对象转换为json字符串的方式

    ObjectNode batch = OBJECT_MAPPER.createObjectNode();
    String s = OBJECT_MAPPER.writeValueAsString((triggerCommands.getCommands()));
    batch.put("commands", s);
    System.out.println("raw String= " + s);
    System.out.println("ObjectNode String = " + batch);

哪个输出;

raw String= [{"cmdid":"a06c00d4-5b8b-4313-a8f3-5663dde0fa5b","type":"test"}]

ObjectNode String = {"commands":"[{\"cmdid\":\"a06c00d4-5b8b-4313-a8f3-5663dde0fa5b\",\"type\":\"test\"}]"}

我很好奇我为什么在将String添加为ObjectNode的值时为什么得到反斜杠。我只想要

ObjectNode String = {"commands":[{"cmdid":"a06c00d4-5b8b-4313-a8f3-5663dde0fa5b","type":"test"}]}

有一个类似的问题here,但没有有效的答案。

3 个答案:

答案 0 :(得分:2)

由于您在a[0]=a[2]; a[2]=a[1]; 域中工作,因此您希望Jackson将命令转换为JsonNode,而不是JsonNode。像这样:

String

答案 1 :(得分:0)

我刚刚阅读了toString()类的某些源代码ObjectNode方法,调用了TextNode.appendQuoted然后调用了静态方法CharTypes.appendQuoted(StringBuilder sb, String content),这在写入对象时会添加(“)由toString(),在这里..当被发现为char“时,它将增加反冲。 由于您的键是一个对象数组,因此如果您检查ObjectNode.put实现,则不允许您将键添加为数组,因此..需要将其解析为String

请注意,您不会得到这个。

ObjectNode String = {"commands":[{"cmdid":"a06c00d4-5b8b-4313-a8f3-5663dde0fa5b","type":"test"}]}

因为它不是在“(引号)和 ObjectNode不允许您使用数组类型的键。

答案 2 :(得分:0)

private String writeUnicodeString() {
    ObjectMapper mapper = new ObjectMapper();
    ObjectNode node = mapper.getNodeFactory().objectNode();
    node.put("field1", "Hello World");
    return node.toString();
}
This outputs:

{"field1":"Hello World"}