这是我尝试将对象转换为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,但没有有效的答案。
答案 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"}