使用json的一些注意事项:
1.加入apache commons必要的包,不然要报错
????? commons-beanutils
????? commons-collections
????? commons-lang
????? commons-logging
????? ezmorph
????? 以及json的包
2.json简单理解成一个key value的数据结构即可,根据key可以找到value,其实质是对字符串的转换。
?
3.JSON 还可以表示一个数组对象,使用 []
包含所有元素,每个元素用逗号分隔,元素可以是任意的 Value;
? Object 对象在 JSON 中是用 {}
包含一系列无序的 Key-Value 键值对表示的,实际上此处的 Object 相当于 Java 中? 的 Map<String, Object>
,而不是 Java 的 Class 。注意 Key 只能用 String 表示。
参考:http://www.ibm.com/developerworks/cn/web/wa-lo-json/
?
4.调用eval()方法可以将一个json字符串转换为一个json对象。eval函数非常快速。它可以编译执行任何JavaScript程序,因此产生了安全性问题。当使用可信任与完善的源代码时才可以使用eval函数。
?
5.调用parse()方法可以获得更高的安全性和更快的处理速度。JSON解析器只能辨识JSON文本,拒绝所有脚本。提供了本地JSON支持的浏览器的JSON解析器将远快于eval函数。
?
6.调用stringify()方法可以将一个json对象转换为一个json字符串。SON stringifier进行反向操作,可以把JavaScript数据结构转换为JSON文本。JSON不支持循环数据结构,因此应小心不要为JSON stringifier提供循环结构。比如一个VO里面嵌套了另一个VO,而这个VO又嵌套了其他VO。var myJSONText = JSON.stringify(myObject, replacer);
如果stringify函数发现一个带有toJSON方法的对象,它将执行此方法,并且返回产生的值。这样一个对象就可以决定自己的JSON表现。
?
7.json中的替换函数
一个替换函数(reviver function)做为可选参数被最终结果的每一级的键(key)与值(value)调用。 每个值都将被替换函数的值代替。这可以用来将一般的类改变成伪类的实例,或者将日期字符串转变为日期对象。(http://www.dreamdu.com/blog/2008/10/19/json_in_javascript/)
myData = JSON.parse(text, function (key, value) { var type; if (value && typeof value === 'object') { type = value.type; if (typeof type === 'string' && typeof window[type] === 'function') { return new (window[type])(value); } } return value; });
?如果没有提供数组或替代函数,一个用于忽略被集成的属性的可选替代函数将被提供。如果想要所有被继承的属性,可以提供一个简单的替换函数:
var myJSONText = JSON.stringify(myObject, function (key, value) { return value; });
?8.不能确定的数量将被替换为null。为了替代其它的值,可以像下面一样使用替换(replacer)函数
function replacer(key, value) { if (typeof value === 'number' && !isFinite(value)) { return String(value); } return value; }?
?
?
Java的JSON包有好几个。最简的那个是不需要带Apache包的。
你用的应该是http://json-lib.sourceforge.net/这里的json-lib
1.加入apache commons必要的包,不然要报错
commons-beanutils
commons-collections
commons-lang
commons-logging
ezmorph
以及json的包
用了json-lib包的时候 才需要导吧。。
parse()
stringify()
这2个方法都是json.js里才有的方法哦。。说说清楚吗
eval()才是JavaScript自有方法
一个类实现了那个JSONString接口 用什么样的方法产生序列化后的字符串比较好呢?
我现在是在toJSONString方法里new一个JSONObject然后手动put进去,感觉这样灵活性太差,用反射遍历字段的话性能上会不会有影响呢?