簡體   English   中英

為什么 ObjectNode 在 Json 字符串中添加反斜杠

[英]Why ObjectNode adds backslash in in Json String

這是我嘗試將對象轉換為 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"}]}

這里有一個類似的問題但沒有可靠的答案。

由於您在JsonNode域中工作,因此您希望 Jackson 將您的命令轉換為JsonNode ,而不是String 像這樣:

ObjectNode batch = OBJECT_MAPPER.createObjectNode();
JsonNode commands = OBJECT_MAPPER.valueToTree(triggerCommands.getCommands());
batch.set("commands", commands);

我只是閱讀了ObjectNode類的toString()方法的一些源代碼,調用了一個TextNode.appendQuoted然后一個靜態方法TextNode.appendQuoted CharTypes.appendQuoted(StringBuilder sb, String content) ,當對象被toString(), TextNode.appendQuoted ,這會添加 (" toString(),這里.. 當找到一個字符 " 時,它會增加一個反彈。 由於你的鍵是一個對象數組,如果你檢查 ObjectNode.put 實現它不允許你添加一個鍵作為數組所以..它需要被解析為一個String

注意你不會得到這個。

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

因為它不在 "(引號)之間的鍵,正如我告訴 ObjectNode 不允許您使用數組類型的鍵。

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"}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM