json字符串和对象转换的方式很多的,但是网上却很少人写一些这些方法的不同,来供初学者学习理解。下面是自己的一些理解总结,有不对的地方希望大家能指出。
首先,说一些json的概念。
json是一种以key:value的复合格式存储数据的协议,这样简化了数据传递量,比较xml更能减轻客户端负载。
json的两种格式:
json对象:
var jsonobj={"name":"tom","sex":"男","age":"22"};
json字符串:
var json='{"name":"Mike","sex":"女","age":"20"}';
json.js
先引入json.js,引入json.js主要是能解决在一些IE7及以下版本JSON未定义问题,现在已经升级到json2.js了。
注:ie8(兼容模式),ie7和ie6没有JSON对象,推荐采用JSON官方的方式,引入json2.js。这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法;
json2.js提供了json的序列化和反序列化方法,可以将一个json对象转换成json字符串,也可以将一个json字符串转换成一个json对象。
1. JSON.parse()
方法用于将json格式的文本串转化为JavaScript 的json数据,这个也是所指的序列化方法,将json格式的,转化为json对象。
var jsonObj = JSON.parse(json);
2.JSON.stringify(jsonobj)
方法用于将javaScript 的json数据转化为json格式的文本串。主要用于向服务端返回数据。这个也就是json对象转json字符串。
以上两个方法都是json2.js提供
json2.js文件的解析:http://blog.csdn.net/u012227177/article/details/25793591 有兴趣的可以看下
还有一种原生的js自带的转化为对象的方法,json中不能有表达式,不然会被执行。
eval('(' + jsonstr + ')'); //可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号
注:ie8(兼容模式),ie7和ie6也可以使用eval()将字符串转为JSON对象,但不推荐这些方式,这种方式不安全eval会执行json串中的表达式。
json.js包升级之后的转换的方法:
新版本的 JSON 修改了 API,将 JSON.stringify() 和 JSON.parse() 两个方法都注入到了 Javascript 的内建对象里面,前者变成了 Object.toJSONString(),而后者变成了 String.parseJSON()。如果提示找不到toJSONString()和parseJSON()方法,则说明您的json包版本太低。
然后是对js进行封装后的jquery插件中转化的方法是
$.toJSON(json)
对象转json
$.evalJSON(obj)
json转对象
这两个方法一般是写在jquery.json-2.3.js文件中定义的。
$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象