一、
1、JS中生成JSON对象的方法:
var json = []; var row1 = {}; row1.id= "1"; row1.name = "jyy"; 或者var row2 = {id:'2',name:'abc'} json.push(row1); json.push(row2);
2、JS中将JSON对象解析为字符串的方法:
var jsonStr = JSON.stringify(json);
3、JS解析JSON对象或者字符串的方法:
var objs = eval(json);或者var objs = eval(jsonStr); for(var j = 0;j<objs.length;j++){ alert(objs[j].id); alert(objs[j].name); }
4、页面中Json对象与Json字符串互转(4种转换方式):
1>jQuery插件支持的转换方式:
$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象
2>浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器:
JSON.parse(jsonstr); //可以将json字符串转换成json对象
JSON.stringify(jsonobj); //可以将json对象转换成json对符串
注:ie8(兼容模式),ie7和ie6没有JSON对象,推荐采用JSON官方的方式,引入json.js。
3>Javascript支持的转换方式:
eval('(' + jsonstr + ')'); //可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号
注:ie8(兼容模式),ie7和ie6也可以使用eval()将字符串转为JSON对象,但不推荐这些方式,这种方式不安全eval会执行json串中的表达式。
4>JSON官方的转换方式:
http://www.json.org/提供了一个json.js,这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法;
可以在https://github.com/douglascrockford/JSON-js上获取到这个js,一般现在用json2.js。
二、
一,直接上代码
<script type="text/javascript"> function aa() { var json = []; var j = {}; for (var i = 1; i < 5; i++) { j.name = "name"; j.cars = "22"; j.obj = "457"; json.push(j); } var a = JSON.stringify(json); alert(a); } </script> <div> <input type="button" value="提交" onclick="aa()" /> </div>
综上:理解是定一个数组和一个对象,将对象插入到数组,然后装换成JSON字符串的逻辑
二,以上代码会出现一个问题:当你插入i的值是发现输出的一直都是最后一个对象的JSON
<script type="text/javascript"> window.onload = function () { var json = []; for (var i = 1; i < 5; i++) { var j = {}; j.name = "name"; j.cars = "22"; j.obj = i; json.push(j); } var a = JSON.stringify(json); alert(a); } </script>
经过JS调试发现,写成这样才是我们想要的结果:(将J的定义写在遍历里面)
原因: 在JS定义出来的变量是Object对象,分配的是一块内存空间,你将这个对象插入到一个数组中,也是在数组内开辟一个空间指向这块内存,你在遍历是数组的容量是一直增大,但是都是指向与同一块内存对象,所以他们的值是一样的,而且是这个对象最后修改的那个值,所以最后数组的值一样,将对象在循环里面定义,则是我们想要的结果
还没有评论,来说两句吧...