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;
});