Apache Johnzon如何实现动态JSON字段?类似Jackson ObjectNode方案
在Apache Johnzon中实现类似Jackson ObjectNode的动态JSON字段处理
是的,Apache Johnzon可以实现类似Jackson的动态JSON字段处理,对应ObjectNode的通用容器是**JsonObject**,它能存储动态键值对,且可以和POJO的静态字段一起序列化输出。
实现代码示例
JsonTest类
import org.apache.johnzon.core.JsonObject; import org.apache.johnzon.mapper.JsonIgnore; import org.apache.johnzon.mapper.JohnzonMapper; public class JsonTest { private String myStaticKey = "foo"; private JsonObject jsonData; // 初始化JsonObject public JsonTest() { this.jsonData = new JsonObject(); } // getters & setters public String getMyStaticKey() { return myStaticKey; } public void setMyStaticKey(String myStaticKey) { this.myStaticKey = myStaticKey; } public JsonObject getJsonData() { return jsonData; } public void setJsonData(JsonObject jsonData) { this.jsonData = jsonData; } @JsonIgnore public void addValue(String key, String value) { jsonData.put(key, value); } @JsonIgnore public String toJson() { return new JohnzonMapper().writeValueAsString(this); } }
MainTest类
public class MainTest { public static void main(String[] args) { JsonTest t = new JsonTest(); t.addValue("myDynamicKey", "bar"); System.out.println(t.toJson()); } }
预期输出
{ "myStaticKey": "foo", "jsonData": { "myDynamicKey": "bar" } }
关键说明
JsonObject是Johnzon提供的动态JSON容器,支持像Map一样添加、修改键值对;- 使用
@JsonIgnore标记不需要参与序列化的方法(比如addValue和toJson),避免这些方法被序列化为JSON字段; - 通过
JohnzonMapper完成POJO的序列化,它会自动处理静态字段和JsonObject类型的动态字段。
内容的提问来源于stack exchange,提问作者Francesco Rosso
相关产品推荐
相关产品推荐

