【问题标题】:How to use Jackson Package in this scenario?在这种情况下如何使用 Jackson 包?
【发布时间】:2018-01-24 09:01:15
【问题描述】:

您好,我有一个如下的 Json:

A {
    B {
        C [{
            x1:x2,
            y1:y2
          }]
       }
  }   

现在我的要求是将 A、B、C 转换为 camelCase 表示法(根据需要),这是我通过使用 @JsonProperty 以及相应 POJO 类的 getter 和 setter 方法完成的。

最后,我的输出如下:

a {
    b {
        c [{
            x1:x2,
            y1:y2
          }]
       }
  }   

现在我想在 b 和 c 之间添加一个新的空对象,例如 d。

您能帮我添加一个新的空 JSON 对象吗?

所需的输出应该是这样的:

a {
    b {
       d {
          c [{
            x1:x2,
            y1:y2
          }]
       }
     }
  }

json:

"Skills" : {
  "SkillSet" : [ 
    {
        "Skill" : "Management"
    },
    {
        "Skill" : "IT"
    }, 
  ]
}

我需要这样的东西:

"skills" : {
  "mainSkills" {
     "skillSet" : [ 
       {
        "Skill" : "Management"
       },
       {
        "Skill" : "IT"
       }, 
     ]
   }
}

我已经完成了 camelCase 的转换,但我需要插入新对象“mainSkills”。

【问题讨论】:

  • 您能否发布一个有效的 JSON?
  • @CássioMazzochiMolin 更新了 JSON。
  • 仍然不是有效的 JSON。
  • 将源 JSON 映射到 Java 类(我们称它们为 A)。将您的目标 JSON 映射到 Java 类(我们称它们为 B)。将源 JSON 解析为 A,将 A 转换为 B,然后将 B 写入 JSON。

标签: java json jackson jackson2


【解决方案1】:

以下将为您提供预期的输出:

String json = "{\n" +
              "  \"skills\": {\n" +
              "    \"skillSet\": [\n" +
              "      {\n" +
              "        \"skill\": \"Management\"\n" +
              "      },\n" +
              "      {\n" +
              "        \"skill\": \"IT\"\n" +
              "      }\n" +
              "    ]\n" +
              "  }\n" +
              "}";

// Create ObjectMapper instance to parse the JSON
ObjectMapper mapper = new ObjectMapper();

// Parse the JSON into the Jackson tree model
JsonNode tree = mapper.readTree(json);

// Store a reference to the "skills" node
JsonNode skills = tree.get("skills");

// Store a reference to the "skillsSet" node
JsonNode skillSet = skills.get("skillSet");

// Remove the "skillsSet" node from the tree
((ObjectNode) skills).remove("skillSet");

// Create the "skillSet" node under "mainSkills" 
// and sets it under the "skills" node
((ObjectNode) skills).set("mainSkills", 
        mapper.createObjectNode().set("skillSet", skillSet));

// Write the tree as a JSON string using the default pretty printer
String newJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(tree);

如果您不想像上面演示的那样操作 JSON,请关注JB Nizet approach

【讨论】:

  • 非常感谢。它按预期工作......我只需要了解您逐步完成的代码。
  • @Pavan 我在代码中添加了 cmets 以使其清晰。
猜你喜欢
  • 2017-09-01
  • 2022-01-23
  • 2015-11-30
  • 2017-05-16
  • 2012-10-06
  • 2011-05-18
  • 2019-11-29
  • 2022-01-23
  • 2018-05-20
相关资源
最近更新 更多