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

升级org.json库后丢失class字段,如何恢复该字段?

恢复org.json升级后丢失的class字段

我在使用org.json 20090211版本时,定义了如下Java POJO:

class Person {
   private String name;
   private int age;

   //getters and setters
}

在main方法中执行以下代码:

JSONObject jsonObject = new JSONObject(person, true);
System.out.println(jsonObject.toString());

输出结果为:

{"name":"John","age":30,"class":"class com.Person"}

现在升级该库后,仅支持无布尔参数的构造方法:

JSONObject jsonObject = new JSONObject(person);  //without true

此时输出结果变为:

{"name":"John","age":30}

丢失了class字段,以下是几种恢复该字段的方法:

  • 手动添加class字段
    创建完JSONObject实例后,直接调用put方法手动加入类信息:

    JSONObject jsonObject = new JSONObject(person);
    // 和旧版本输出格式一致的话,用toString()
    jsonObject.put("class", person.getClass().toString());
    // 若只需要类全限定名,用getName()
    // jsonObject.put("class", person.getClass().getName());
    System.out.println(jsonObject.toString());
    
  • 封装通用工具方法
    如果有多个类需要处理,可封装工具方法统一处理对象转JSONObject并添加class字段:

    public static JSONObject toJsonObjectWithClass(Object obj) {
        JSONObject jsonObject = new JSONObject(obj);
        jsonObject.put("class", obj.getClass().toString());
        return jsonObject;
    }
    

    调用时直接使用该方法:

    JSONObject jsonObject = toJsonObjectWithClass(person);
    System.out.println(jsonObject.toString());
    
  • 排查新版本库的配置项
    部分新版本org.json可能提供了配置开关或替代参数来控制是否包含类信息,可以查看你使用的新版本库的文档,确认是否有类似旧版本布尔参数的功能开关。不过从当前情况看,这种可能性较低,可作为补充排查方向。

内容的提问来源于stack exchange,提问作者user3549383

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:45:47