当前位置: 首页 > 知识库问答 >
问题:

使用jackson将子节点设置为根节点

井昊乾
2023-03-14

问题很简单:从这里:

{
"categoryId":"some_id",    
"properties": {
            "id": "braja_de_nana",
            "displayName": "test",
            "longDescription": "<p>TESTE</p>",
            "active": true,
            "attributes": [
                {
                  "name": "made",
                  "value": "some value",
                  "property": "some_value"
                }
            ]
        }
}

我必须分析一下:

{
    "categoryId":"some_id",
    "some_value":"some value",    
    "properties": {
                "id": "braja_de_nana",
                "displayName": "test",
                "longDescription": "<p>TESTE</p>",
                "active": true
            }
    }

这意味着每个属性都应该成为一个新的根节点。但对我来说,最困难的是我不能从“属性”中设置“属性”值作为对象节点名称。

这对我来说是个挑战。我可以在根节点中设置新节点。已经从“attributes”中获得了一个映射,然后尝试使用forEach对它们进行迭代,以便将结果放入一个节点中,但如图所示,我必须使用“property”将其设置为对象名称的键,然后获取值并设置为其值。

有可能这样做吗?

非常感谢。

共有1个答案

危卜鹰
2023-03-14

如果您正在尝试将属性添加到根节点,您可以删除该节点并将其字段添加到根节点:

ObjectMapper mapper = new ObjectMapper();

JsonNode root = mapper.readTree(json);

JsonNode attributesNodeArray = ((ObjectNode) root.get("properties"))
        .remove("attributes");

JsonNode attributesNode = attributesNodeArray.get(0);

Iterator<String> fieldNames = attributesNode.fieldNames();

while (fieldNames.hasNext()) {
    String name = fieldNames.next();
    root = ((ObjectNode)root).set(name, attributesNode.get(name));
}

System.out.println(root.toPrettyString());

输出:

{
  "categoryId" : "some_id",
  "properties" : {
    "id" : "braja_de_nana",
    "displayName" : "test",
    "longDescription" : "<p>TESTE</p>",
    "active" : true
  },
  "name" : "made",
  "value" : "some value",
  "property" : "some_value"
}
 类似资料:
  • 有没有办法为一个TreeView设置两个根节点? 我发现很多例子,如果简单的树视图,但没有有用的例子,我的情况下。

  • 问题内容: 我想打印根节点的子元素。这是我的XML文件。 根据我的理解,根节点是“公司”,其子节点必须是“职员”和“职员”(因为存在“职员”节点2次)。但是,当我尝试通过我的Java代码获取它们时,我得到了5个子节点。3个额外的文本节点从哪里来? Java代码: 输出: 为什么三个文本节点要过来? 问题答案: 为什么三个文本节点要过来? 它们是子 元素 之间的空白。如果只需要子元素,则应忽略其他类

  • 我想打印根节点的子元素。这是我的XML文件。 根据我的理解,根节点是“company”,其子节点必须是“staff”和“staff”(因为有两个“staff”节点)。但是当我试图通过java代码获取它们时,我得到了5个子节点。3个额外的文本节点来自哪里? Java代码: 输出: 为什么这三个文本节点会出现在这里?

  • 问题内容: 停留在我将如何重构以使其符合: 这是很好但不是有效的,我的理解。电流输出: 太平坦了,而不是像例子一样嵌套。 我相信,如果我使用的是正确的术语,这将构成该元素,其他元素将成为该元素的节点。 本类: 本类: 锻炼的和类: 我期待抓住这个通过网络; 首先需要将结构与示例匹配。 问题答案: 你很亲密 您需要更改在MyNotes类中为myNotes命名xmlElement的方式。同样,MyNo

  • 当我们进行BST时,我明白一个主要的关键点是左孩子必须小于右孩子。当我们创建一个BST并有一个根节点时,当您在该根节点的左侧遍历并到达其右子节点时,右子节点是否也大于根节点? 如果我们在根节点的右侧遍历,也是如此。如果我们在根节点的右侧遍历,我们会遇到这样一种情况吗,即我们击中了一个小于根节点值的左子节点?

  • 当我使用将新节点插入到二叉树中时,它只在子节点的位置插入新节点,即使根节点已经有左、右子节点。它不是访问子节点来创建更深层次的二叉树。 抱歉英语不好。