为什么" class"," metaClass"和"声明类#34;不能用作JSON-lib中的键?

时间:2015-10-04 07:23:34

标签: java json json-lib

我偶然发现效果,JSON-lib(2.4)的默认配置不允许使用键classmetaClassdeclaringClass的值(请参阅JsonConfig.DEFAULT_EXCLUDES)。当相应对象添加到JSON时,此类键值对会从JSONArray表示中删除(请参阅下面的代码段)。

// import net.sf.json.*;
JSONObject anElement = new JSONObject();
anElement.put("term", "a value");
anElement.put("class", "a value");

JSONArray theArray = new JSONArray();
theArray.add(anElement); // Default behavior.

boolean termWasAdded = (((JSONObject)theArray.get(0)).get("term")).equals("a value");
// evaluates to true
boolean classWasAdded = ((JSONObject)theArray.get(0)).get("class") != null;
// evaluates to false

我的问题:任何人都可以解释,为什么classmetaClassdeclaringClass不能用作此处的密钥? - 这些项目是否在JSON中以某种方式保留了符号?

1 个答案:

答案 0 :(得分:1)

根据源代码:

  

在搜索到JSON时排除bean属性和/或映射键(默认= ['class','metaClass','declaringClass'])

这些是在将对象转换为JSON时不希望序列化的bean属性。此外,还有一些方法可用于在生成的JSON中包含这些属性。