java - Jackson 将属性序列化并包装到一个新对象中

标签 java json jackson

序列化以下类的对象会产生类似的字符串

public class User implements Serializable{

    private Integer id;
    private String name;
    private Integer pinCode;
    private String city;

    // getters /setters
}

{"id":1,"name":"XYZ","pinCode":123456,"city":"ABC"}

但是我们希望属性 pinCode 和 city 应该成为新 Json 节点(例如地址节点)的一部分。

所以我对结果的期望是:

{
  "id": 1,
  "name": "XYZ",
  "address": {
    "pinCode": 123456,
    "city": "ABC"
  }
}

是否可以在不重新组织类结构并使用 Json 注解的情况下完成此任务

与 @JsonUnwrapped 完全相反的行

最佳答案

您可以使用这样的解决方法(但首选使用 JsonSerialize):

public class User implements Serializable{

    private Integer id;
    private String name;

    @JsonIgnore
    private Integer pinCode;

    @JsonIgnore
    private String city;

    @JsonProperty("address")
    public Map<String, Object> getAddress() {
        Map<String, Object> map = new HashMap<>();
        map.put("pinCode", pinCode);
        map.put("city", city);
        return map;
    }

    //Deserealization
    public void setAddress(Map<String, Object> map) { 
        if(map!=null) { 
            city = (String) map.get("city"); 
            pinCode = (Integer) map.get("pinCode"); 
        } 
    }

    // getters /setters
}

感谢@hemantvsn提供反序列化示例

关于java - Jackson 将属性序列化并包装到一个新对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37724834/

相关文章:

java - 不要连接使用 setText 显示的文本。使用带占位符的资源字符串

java - 如何使用 jackson (com.fasterxml.jackson) 为相同的 key 使用不一致的 json 结构?

java - Jackson ObjectMapper解析HashMap返回所有字段= NULL

python - 使用 Python 解析用户个人资料数据的 Twitter API JSON 输出时出现问题

json - 如何在spring boot中重命名json对象(变量)名称

java - 在 swing 中向图像添加滤镜

java - 如何显示另一个类的图形

java - 如何从 .sh 脚本中启动可执行 jar?

json - Firefox:在“网络”标签上查看原始JSON

json - 像Web on Dart上的JSON Stringify