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

JSON(二:json.js文件使用)
     JSON字符串:
var str = '{ "name": "cxh", "sex": "man" }'; 

     JSON对象:
var str2 = { "name": "cxh", "sex": "man" }; 

1、如果原型没有被增加的话则增加原型对象即if (!Object.prototype.toJSONString)
JSON中为JS扩充的方法有:
/**
 * 由JS对象转换成JSON字符串
 */
array.toJSONString()
boolean.toJSONString()
date.toJSONString()
number.toJSONString()
object.toJSONString()
string.toJSONString()

/**
 * 由JS字符串转换成JSON对象
 */
 s.parseJSON(filter)

2、数组转换成JSON字符串
return '[' + a.join(',') + ']';

3、布尔值转换成JSON字符串
return String(this);

4、日期类型转换成JSON字符串
return '"' + this.getUTCFullYear() + '-' +
			f(this.getUTCMonth() + 1) + '-' +
			f(this.getUTCDate()) + 'T' +
			f(this.getUTCHours()) + ':' +
			f(this.getUTCMinutes()) + ':' +
			f(this.getUTCSeconds()) + 'Z"';

       说明:
    这里返回的是根据世界时从 Date 对象获取的年份、月份等数据。
4、数字类型转换成JSON字符串
return isFinite(this) ? String(this) : 'null';

       说明:
    如果 number 是有限数字(或可转换为有限数字),那么返回 true。否则,如果 number 是 NaN(非数字),或者是正、负无穷大的数,则返回 false。
5、对象转换成JSON字符串
<script type="text/javascript">
	var obj = {};
	obj.name = 'zhangsan';
	alert(obj.toJSONString());			
</script>

       说明:
    处理过程为首先定义一个数组
var a = [];
a.push(k.toJSONString() + ':' + v.toJSONString());
return '{' + a.join(',') + '}';

6、字符串转换成JSON字符串
if (/["\\\x00-\x1f]/.test(this)) {
	return '"' + this.replace(/[\x00-\x1f\\"]/g, function (a) {
		var c = m[a];
		if (c) {
			return c;
		}
		c = a.charCodeAt();
		return '\\u00' +
			Math.floor(c / 16).toString(16) +
			(c % 16).toString(16);
	}) + '"';
}
return '"' + this + '"';

7、由JSON字符串转换为JSON对象
s.parseJSON = function (filter) {
	......
	return filter(k, v);
}

如:
new Date().toJSONString().parseJSON()
或
var array = [1, 2, 3, 4];
alert(array.toJSONString().parseJSON());

       String类中的对象方法parseJSON有个可选的参数,hook,这个参数是个钩子函数,可以对返回的结果进行过滤和转化(看看有没有这样的需要了),它会获得解析过程中的每一个值,并做可能的替换。如果它返回了自己接收的东西的话,paresJSON方法的处理结果就不会有变化了。
Example:

// Parse the text. If a key contains the string 'date' then convert the value to a date.

myData = text.parseJSON(function (key, value) {
	return key.indexOf('date') >= 0 ? new Date(value) : value;
});