【问题标题】:Why ObjectNode adds backslash in in Json String为什么 ObjectNode 在 Json String 中添加反斜杠
【发布时间】:2019-02-22 23:29:18
【问题描述】:

这是我尝试将对象转换为 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\"}]"}

我很想知道为什么当我将字符串作为 ObjectNode 的值添加时会出现反斜杠。我想要的只是

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

here 提出了类似的问题,但没有可靠的答案。

【问题讨论】:

  • 因为在 JSON 字符串中,必须对双引号进行转义。您希望 commands 属性的值是 JSON 数组,而不是字符串。

标签: java string object jackson jackson2


【解决方案1】:

由于您在JsonNode 域中工作,因此您希望Jackson 将您的命令转换为JsonNode,而不是String。像这样:

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

【讨论】:

    【解决方案2】:

    我刚刚阅读了ObjectNode 类的一些源代码toString() 方法,调用了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 不允许您使用数组类型的键。

    【讨论】:

      【解决方案3】:
      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"}
      

      【讨论】:

        猜你喜欢
        • 2012-05-06
        • 2016-06-14
        • 2014-09-06
        • 2017-06-08
        • 1970-01-01
        • 1970-01-01
        • 2016-03-12
        • 1970-01-01
        • 2021-01-03
        相关资源
        最近更新 更多