日期:2014-05-16  浏览次数:20420 次

JSON使用注意

使用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;
}
?

?

?

1 楼 cjx186 2009-12-18  
http://www.json.org
Java的JSON包有好几个。最简的那个是不需要带Apache包的。
你用的应该是http://json-lib.sourceforge.net/这里的json-lib
2 楼 wucc1986 2009-12-18  
使用json的一些注意事项:
1.加入apache commons必要的包,不然要报错
      commons-beanutils
      commons-collections
      commons-lang
      commons-logging
      ezmorph
      以及json的包
用了json-lib包的时候 才需要导吧。。
parse()
stringify()
这2个方法都是json.js里才有的方法哦。。说说清楚吗
eval()才是JavaScript自有方法
3 楼 cnlinkin 2009-12-21  
搭车请问一下
一个类实现了那个JSONString接口 用什么样的方法产生序列化后的字符串比较好呢?
我现在是在toJSONString方法里new一个JSONObject然后手动put进去,感觉这样灵活性太差,用反射遍历字段的话性能上会不会有影响呢?