eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题

本文探讨了JavaScript中eval()函数和jQuery.parseJSON()方法在处理JSON数据时的差异,同时关注了在使用JavaScript时可能出现的缺少分号导致的语法问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在网络上,前台获取数据的方式主要为:xml,json,xml,jsonp,txt,其中最多的方式为json,服务器将json返回前台,前端工程师用javascript进行解析获取重要数据,
json传送数据,内容占空间较小,但是可读性较差。
最简单的json表达式为{'name':'jack'}跟java中的map类似,分为key,value.由于现在做的一个项目涉及到json的解析,这里我简单学习了一下json.
json的两种解析方式,一个是javascript自带api中的函数eval(),一个是jquery.parseJSON(),那么这两个方法有什么不同呢。
现在我们自定义一个简单的json模式对象:

var result1={'name':'jack','age':'23','work':'IT'};

自定义一个简单的方法,方法名自定义:

function pjson(){
 var str=eval(result1);
 alert(str.name);
 }

跟预想的一样,弹出一个框,内容显示为jack.由于给予的json比较规范,所以通过以下方式也可以直接获取数据,

function pjson1(){
 alert(result1.name);}

返回值仍为jack.
关于jQuery.parseJson对json的解析方式,如果这里采用result1那么会报错,使得json无法被解析,如图json2所示

eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题 - js前端入流 - Java系语言从业者

我们需要将json进行修改,如将单引号改为双引号:

 。

var result2={"name":"jack","age":"23","work":"IT"};

然而还是会出错,错误信息如图:json3所示

eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题 - js前端入流 - Java系语言从业者

 最后将json再次修改为如下所示

var result2='{"name":"jack","age":"23","work":"IT"}';

终于解析成功。这里也就留给我们一个问题,到底用那种方式进行json解析最为靠谱,也就是可以适合所有的json数据解析。

eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题 - js前端入流 - Java系语言从业者

  这里如果还想采用pjson1方式获取数据已经不可能,因为整个result2已经被当作一个字符串。
 那么我们如果用pjson()方式又是什么效果呢?试一下吧!

var result2='{"name":"jack","age":"23","work":"IT"}';
 function pjson(){
 var str=eval(result2);
 alert(str.name);
 }

 其所报的错误为缺少分号:

eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题 - js前端入流 - Java系语言从业者这个结果让我很诧异。

 在这里我依稀记得需要在eval()方法中加入括号,但是是什么括号忘记了。这里试一下,没办法,总的理解事情的真相:
 先添加一对大括号{}:

var result2='{"name":"jack","age":"23","work":"IT"}';
 function pjson(){
 var str=eval("{"+result2+"}");
 alert(str.name);
 }

出现异常,如图json5.png所示。

eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题 - js前端入流 - Java系语言从业者

  添加一对[]括号:

 var result2='{"name":"jack","age":"23","work":"IT"}';
 function pjson(){
 var str=eval("["+result2+"]");
 alert(str.name);
 }

 出现无定义的声明:如图json6.png

eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题 - js前端入流 - Java系语言从业者

 很不情愿的添加一对小括号():

 var result1={'name':'jack','age':'23','work':'IT'};
 var result2='{"name":"jack","age":"23","work":"IT"}';
 function pjson(){
 var str=eval("("+result2+")");
 alert(str.name);
 }

居然成功了,返回结果与需要的结果完全一致。
当我们为自己的成功感到自豪时一个问题又出现了,能不能用pjson解析result1中的数据呢。
答案居然是否定的,我们做了这么多无非就是希望能够找到一个能够解析所有json的一种方式,而此时抛出的异常居然是缺少‘]’。

eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题 - js前端入流 - Java系语言从业者

 那我们该如何解决呢,肯定是有办法的,最后我认为给予result赋值时获取的事一个对象,该类型不是字符串,毕竟在json1方法中能够调用就证明了这点,result1的定义方式
倒有点类似枚举之类的。
最后我将result改为这样

var result1="{'name':'jack','age':'23','work':'IT'}";
 function pjson2(){
 var str=jQuery.parseJSON(result1);
 alert(str.name);
 }

出现错误,如图:
eval()与jQuery.parseJSON()的差别以及常见的解析缺少分号的问题 - js前端入流 - Java系语言从业者
  这个错误我很少见到,个人认为所说的无效字符是指我的json格式不能被解析吧,可能jQuery.parseJSON()不能解析带单引号的json数据,
 查看了一下API貌似也是这样说的,(英语水平有限,大意纯属猜测)。
 仿照eval()的方式添加各种括号都没有成功,也从侧面证明着我的猜测。当服务器返回数据时我们很难把握它的格式,但是只要说json我们应该采用eval()方法去处理,
 当然这里只是我根据小量信息做出的结论。

 其实我们从服务器获取的数据保装一般如:{'name':'jack','age':'23','work':'IT'}但是跟上面我们自定义的result1不一样,
 由于其本身为字符串形式,所以我们采用的方法不会出错,而result1输出返回的是一个object对象。只有给其添加“”号成为字符串才能被解析。
 以下两种方式也都能成功:

var result1="{name:'jack',age:'23',work:'IT'}";
 var result2='{name:"jack",age:"23",work:"IT"}';
 function pjson(){
 str=eval("("+result2+")");
 alert(str.name);
 }

其实现在有点迷惑,jquery.parseJSON()功能应该不会比eval()差,为什么在这里却出现上述问题呢?也许对jQuery.parseJSON而言,result1不符合标准。
 将result1放到json解析器中查看爆出:json9.png这样的异常。
 查阅很多资料上面的json格式key和value对象或字符串都是采用双引号"",也就是说var result2='{"name":"jack","age":"23","work":"IT"}';
 才是标准的json.
 这里必须说明一下,个人还是推荐使用eval("("+data+")"),从我的从业生涯中遇到的json里面的数据都是单引号,也就是说jQuery.parseJSON根本无法解析。
 最后祝各位工作顺利。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值