Почему ObjectNode добавляет обратную косую черту в Json String - PullRequest
0 голосов
/ 19 сентября 2018

Вот как я пытаюсь преобразовать объект в json String

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

Здесь задается похожий вопрос , но нет четкого ответа, который сработал.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Поскольку вы работаете в домене JsonNode, вы хотите, чтобы Джексон преобразовывал ваши команды в JsonNode, а не String.Как это:

ObjectNode batch = OBJECT_MAPPER.createObjectNode();
JsonNode commands = OBJECT_MAPPER.valueToTree(triggerCommands.getCommands());
batch.set("commands", commands);
0 голосов
/ 19 сентября 2018

Я только что прочитал некоторые исходные коды toString() метода класса ObjectNode, вызывает TextNode.appendQuoted, а затем статический метод CharTypes.appendQuoted(StringBuilder sb, String content), это добавляет ("), когда объект записывается toString(), здесь .. когданайден символ ", то это добавляет обратную реакцию.Поскольку ваш ключ (ключи) является массивом Object, если вы проверите реализацию ObjectNode.put, он не позволяет добавить ключ в виде массива, поэтому ... его необходимо проанализировать как String

Я не получу это.

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

, потому что ключ, с которым он не заключен в "(кавычки) и, как я сказал, ObjectNode, не позволяет использовать ключ типа array.

...