【问题标题】:convert POJO to JsonNode with POJO fieldnames使用 POJO 字段名将 POJO 转换为 JsonNode
【发布时间】:2018-09-06 05:04:12
【问题描述】:

要求:

  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"}

【问题讨论】:

  • 您的 JSON 无效...外部对象中的这些对象没有键。大概这应该是一个列表,不是吗?

标签: java json jackson pojo jackson-databind


【解决方案1】:

解决方案是将@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 反序列化。

【讨论】:

    猜你喜欢
    • 2013-11-11
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 2022-07-24
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多