升级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
相关产品推荐
相关产品推荐

