Извлечение объектов из ArrayNode в ObjectNode с помощью Jackson

#java #jackson

#java #джексон

Вопрос:

Кажется, я нигде не могу найти решение этой проблемы, задаваясь вопросом, достижимо ли это.

Мой ввод выглядит следующим образом:

 {
    "Table": {
        "Row": [
            {
                "Order1": {
                    "Date": "foo"
                }
            },
            {
                "Order2": {
                    "Date": "foo"
                }
            },
            {
                "Order3": {
                    "Date": "foo"
                }
            }
        ]
    }
}
 

Чего я пытаюсь добиться, так это:

 {
    "Table": {
        "Order1": {
            "Date": "foo"
        },
        "Order2": {
            "Date": "foo"
        },
        "Order3": {
            "Date": "foo"
        }
    }
}
 

По сути, просто избавьтесь от ArrayNode того, что обертывает мои объекты.

Я попробовал следующее, но не могу понять, как получить имя поля объектов, т.Е. «Order1», «Order2» и т.д., Чтобы заполнить мой новый ObjectNode .

   protected ObjectNode arrayToObjects(ArrayNode input) {
    final ObjectNode result = JsonNodeFactory.instance.objectNode();

    input.forEach(node -> {
        result.set("???", ((ObjectNode) node).deepCopy());
    });

    return resu<
  }
 

Вопросительные знаки — это то, где я в замешательстве, кажется, я не могу понять, как получить имена полей, как я сказал выше, ниже приведен скриншот отладки в цикле, информация есть, но я не могу понять, как ее развернуть.

введите описание изображения здесь

Ответ №1:

Вам нужно добавить все свойства из каждого элемента в result ObjectNode :

 protected static ObjectNode arrayToObjects(ArrayNode input) {
    final ObjectNode result = JsonNodeFactory.instance.objectNode();

    input.forEach(node -> node.fields().forEachRemaining(entry -> result.set(entry.getKey(), entry.getValue())));

    return resu<
}