在JS中,一般有两种方法将JSON字符串解析成JSON数据格式:使用eval()函数和使用Function对象解析返回。下面举个例子,有兴趣的朋友可以参考一下。
在JS中,通常有两种方法将JSON字符串解析成JSON数据格式:
1.一种是使用eval()函数。
2.使用函数对象解析返回。
使用eval函数来解析,并且使用jquery的each方法来遍历
用jquery解析json数据的方法作为jquery异步请求的传输对象,jquery返回的结果是JSONObject。这里考虑的是服务器返回的JSON字符串的形式。对于JSONObject等插件封装的JSON对象,和这个差不多,这里就不解释了。首先,这里给出JSON字符串集。字符串集如下所示:
代码如下:复制代码如下:var data=' {root: [{name:' 1 ',value:' 0'},{name:' 6101 ',value:'北京' },{name:'6102 ',value:'天津' },{name:'' {name:'6104 ',value:'重庆' },{name:'6105 ',value:'渭南' },{name:'6106 ',value:'燕'安' },{name:'6107 ',value:'汉中' }。这里基于jquery异步获取的数据类型——json对象和字符串,分别介绍两种方法获取结果的处理方法。
1.对于服务器返回的JSON字符串,如果jquery异步请求没有类型描述,或者被接受为字符串,就需要对象化一次。方式要么太麻烦,要么把字符串放在eval()里执行一次。该方法也适用于以普通的javascipt方式获取json对象。下面是一个例子:
var data obj=eval((' data '));//转换为json对象。你为什么想在这里评估?"('(' data ')')";//"?
原因是:eval本身的问题。因为json以“{}”开头和结尾,所以在JS中会被当作语句块,所以必须强制转换成表达式。
括号的作用是在处理JavaScript代码时,强制eval函数将括号中的表达式转换为对象,而不是作为语句执行。例如,如果没有添加对象文字{},那么eval会将花括号识别为JavaScript代码块的开始和结束标记,然后将{}视为空语句。所以下面两个执行结果不一样:复制代码如下:alert(eval(' { } ');//返回未定义的警报(eval('({ })');//返回对象[Object]对于这种写法,在JS中,随处可见。
如:(function()){ }();做关闭操作时等。- .//输出root $的子对象数。each (dataobj.root,function(idx,item){ if(idx==0){ return true;}//输出每个根子对象的名称和值alert ('name:' item.name ',value:' item . value ');})注意:对于生成json对象的一般js,只需要替换$。each()方法带有一个for语句,其余都是一样的。
2.对于服务器返回的json字符串,如果jquery异步请求将类型(一般是这个配置属性)设置为“json”,或者使用$。getJSON()方法得到服务器返回,那么就不需要eval()方法了,因为此时得到的结果已经是一个JSON对象,直接调用对象就可以了,这里,取$。以getJSON方法为例说明数据处理方法:复制代码如下:$。getjson ('http://www.phpzixue.cn/',{param:' gaoyusi'},Function(data){ //这里返回的数据已经是json对象//以下其他操作同第一种情况$。each (data.root,function (idx,item){ if(idx==0){ return true;//与countinue相同,返回false作为break} alert ('name:' item.name ',value:' item . value);});});这里需要特别注意的是,模式1下的eval()方法动态执行字符串(可能是js脚本),容易造成系统的安全问题。所以可以采用一些绕开eval()的第三方客户端脚本库,比如JavaScript中的JSON,它提供了一个不超过3k的脚本库。
第二种解析方法是使用函数对象。其典型应用是对返回数据的解析和复制代码,如JQUERY中AJAX方法下的成功,如下:var JSON=' {'name':' CJ ',' age ':18 } ';data=(新函数(',' return ' JSON))();此时,数据是一个将被解析的json对象。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。