Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么ObjectNode在Json字符串中添加反斜杠_Java_String_Object_Jackson_Jackson2 - Fatal编程技术网

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

Java 为什么ObjectNode在Json字符串中添加反斜杠,java,string,object,jackson,jackson2,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.

下面是我如何尝试将对象转换为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"}]}

有人问了一个类似的问题,但没有可靠的答案。

我只是读了一些
ObjectNode
类的sourcecode
toString()
方法,调用
TextNode.appendQuoted
然后是静态方法
CharTypes.appendQuoted(StringBuilder sb,String content)
,这添加了(“)当对象由
toString()写入时,
此处..当找到一个字符时“,则会添加一个齿隙。 由于密钥是对象数组,如果选中ObjectNode.put实现,则其不允许您将密钥添加为数组so。。需要将其解析为
字符串

注意你不会得到这个

ObjectNode String = {"commands":[{"cmdid":"a06c00d4-5b8b-4313-a8f3-5663dde0fa5b","type":"test"}]}
因为它的键不在a“(引号)和a之间,正如我所说的
ObjectNode不允许使用数组类型的键。

我刚读了
ObjectNode
类的一些sourcecodes
toString()
方法,调用
TextNode.appendQuoted
然后是静态方法
CharTypes.appendQuoted(StringBuilder sb,String content)
,这在
toString()编写对象时添加了(“),
此处。。当发现一个“字符”时,它会增加一个反冲。 由于您的键是对象数组,如果您选中ObjectNode.put实现,它不允许您将键添加为数组,因此..需要将其解析为
字符串

注意你不会得到这个

ObjectNode String = {"commands":[{"cmdid":"a06c00d4-5b8b-4313-a8f3-5663dde0fa5b","type":"test"}]}
因为它的键不在a“(引号)和a之间,正如我所说的
ObjectNode不允许使用数组类型的键。

因为您在
JsonNode
域中工作,所以希望Jackson将命令转换为
JsonNode
,而不是
字符串。像这样:

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

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

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

因为JSON字符串中包含一个双引号,所以必须对其进行转义。您希望commands属性的值是一个JSON数组,而不是一个字符串。因为JSON字符串中有一个字符串,所以必须转义双引号。您希望commands属性的值是JSON数组,而不是字符串。