使用 Jackson 将对象从 ArrayNode 提取到 ObjectNode

Extract objects from ArrayNode to ObjectNode with Jackson

我似乎无法在任何地方找到解决这个问题的方法,想知道它是否可以实现。

我的输入如下:

{
    "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 result;
  }

问号是我看不懂的地方,上面说的怎么获取字段名我看不懂,下面是循环debug的截图,信息是有的但是我可以似乎想出如何打开它。

您需要将每个项目的所有属性添加到 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 result;
}