You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:23:12