java - 使用 POJO 字段名将 POJO 转换为 JsonNode

标签 java json jackson pojo jackson-databind

要求:

  1. 将 json 文件中选定的字段收集到 POJO 中(字段名称不匹配)
  2. 更新 POJO 的其他非映射字段
  3. 转换回带有 POJO 字段名的 jsonNode

问题: 步骤 1 和 2 没问题。当将 POJO 转换回 JsonNode 时,我无法在 POJO 字段名称中获取它。谁能建议一种方法来实现这个?

下面是我的代码

@JsonIgnoreProperties(ignoreUnknown = true)
public class MyPOJO {

@JsonProperty("Firstname")
private String name;

@JsonProperty("Country")
private String nationality;

private String state;

//getters and setters
}

逻辑

     ObjectMapper map = new ObjectMapper();
    JsonNode root =map.readTree(new Main().getResorceFile());
    List<MyPOJO> myList = new ArrayList<MyPOJO>();

    for(JsonNode each : root){
        MyPOJO myPOJO = new MyPOJO();
        myPOJO= map.readValue(each.toString(),MyPOJO.class);
        System.out.println(myPOJO.toString());
        myList.add(myPOJO);
    }
    for(MyPOJO p : myList){
        JsonNode node = map.convertValue(p,JsonNode.class);
        System.out.println((node.toString()));
    }

Json 文件

    {
        {
            "Firstname":"Tez",
            "Lastname":"Morris",
            "Country":"US"
        },
        {
            "Firstname":"Kip",
            "Lastname":"Lee",
            "Country":"US"
        },
        {
            "Firstname":"Pam",
            "Lastname":"Carr",
            "Country":"US"
        },
        {
            "Firstname":"lin",
            "Lastname":"Dale",
            "Country":"US"
        }
    }

输出:

    Main{name='Tez', nationality='US', state='null'}
    Main{name='Kip', nationality='US', state='null'}
    Main{name='Pam', nationality='US', state='null'}
    Main{name='lin', nationality='US', state='null'}
    {"state":null,"Firstname":"Tez","Country":"US"}
    {"state":null,"Firstname":"Kip","Country":"US"}
    {"state":null,"Firstname":"Pam","Country":"US"}
    {"state":null,"Firstname":"lin","Country":"US"}

预期输出

    Main{name='Tez', nationality='US', state='null'}
    Main{name='Kip', nationality='US', state='null'}
    Main{name='Pam', nationality='US', state='null'}
    Main{name='lin', nationality='US', state='null'}
    {"state":null,"name":"Tez","nationality":"US"}
    {"state":null,"name":"Kip","nationality":"US"}
    {"state":null,"name":"Pam","nationality":"US"}
    {"state":null,"name":"lin","nationality":"US"}

最佳答案

解决方案是将 @JsonProperty 放在具有不同值的 getter 和 setter 上,例如:

[…]
private String nationality;

@JsonProperty("nationality")
public String getNationality() {
    return nationality;
}

@JsonProperty("Country")
public void setNationality(String nationality) {
    this.nationality = nationality;
}
[…]

getter 执行序列化,setter 执行反序列化。

关于java - 使用 POJO 字段名将 POJO 转换为 JsonNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49518793/

相关文章:

java - 在 Eclipse 中计算测试用例覆盖率时如何跳过 Lombok getter 和 setter?

c# JSON 直接嵌套数组

java - Java中的JSON反序列化错误

javascript - 如何从 API 请求

Ruby:使用 JSON 正文 PUT 请求?

java - Jackson:如何生成拒绝所有其他内容的 json 模式

java - Jackson 2 是否有相当于 Jackson 1 的 StdSerializerProvider 的?

java - 替代已弃用的方法sparksession.read.json(JavaRDD)

java - 用于添加多个对象实例的可变参数

java - 对于 List<String> 我想添加第一个默认值作为 ALL