//json对象 一、$.each遍历json对象 查看一个简单的jQuery的例子来遍历一个JavaScript数组对象。 var json = [ {"id":"1","tagName":"apple"}, {"id":"2","tagName":"orange"}, {"id":"3","tagName":"banana"}, {"id":"4","tagName":"watermelon"}, {"id":"5","tagName":"pineapple"} ]; $.each(json, function(i, obj) { alert(obj.tagName); }); 上面的代码片断工作正常,提示 “apple”, “orange” … 等,如预期一样。
//json字符串 问题1: JSON 字符串。 下面的例子中,声明了一个JSON字符串(随附单或双引号)直接地。 var json = '[ {"id":"1","tagName":"apple"}, {"id":"2","tagName":"orange"}, {"id":"3","tagName":"banana"}, {"id":"4","tagName":"watermelon"}, {"id":"5","tagName":"pineapple"} ]'; $.each(json, function(i, obj) { alert(obj.tagName); }); 在Chrome中,它显示在控制台下面的错误: Uncaught SyntaxError: Unexpected token ILLEGAL 解决方案:JSON字符串转换为JavaScript对象。 要修复它,通过标准JSON.parse()或jQuery 的 $.parseJSON 将其转换为JavaScript对象。 var json = '[ {"id":"1","tagName":"apple"}, {"id":"2","tagName":"orange"}, {"id":"3","tagName":"banana"}, {"id":"4","tagName":"watermelon"}, {"id":"5","tagName":"pineapple"} ]'; $.each(JSON.parse(json), function(i, obj) { alert(obj.tagName); }); //or $.each($.parseJSON(json), function(i, obj) { alert(obj.tagName); });
二、json数组有长度json.arrayname.length,如果单纯是json格式,那么不能直接使用json.length方式获取长度,而应该使用其他方法。(注:arrayname为数组名) 例1: 现在有json1数据如下: var json1={ "abc":[ {"name":"txt1"}, {"name":"txt2"} ] }; 以上遍历的方法是: for(var i=0;i<json1.abc.length;i++){ alert(json1.abc[i].name); } 这里的json1.abc是一个数组,数组是由2个子json组成的,数组是有length属性的,而普通的json是没有该属性的。
现在有json2数据如下: var json2={"name":"txt1","name2":"txt2"}; json本身没有length属性,所以用length属性自然会出错。 for(var i=0;i<json2.length;i++){ alert(json2[i].text); }//以上脚本执行时,将会出错。 那么要遍历这样的json怎么办呢? 我们可以这么做: for(var js2 in json2){ //使用 for-in 来循环对象的属性 alert( js2 + "=" + json2[js2]); } //获得长度 var jslength=0; for(var js2 in json2){ jslength++; } //把这段代码写成一个方法,以后调用就行了: function getJsonLength(jsonData){ var jsonLength = 0; for(var item in jsonData){ jsonLength++; } return jsonLength; }