JSON.parse解析单引号名值对报错

时间:2022-09-04 21:32:40

今天整理代码的时候发现JSON.pare解析时会报了一个错误,而且很难找原因,调试了几分钟没有成功,猜测可能是单双引号引起的错误。修改了单双引号后程序正常运行了,现在记录下这个bug。

关于JSON.parse()的用法可以参考这里   https://technet.microsoft.com/zh-cn/sysinternals/cc836466(en-us,VS.85).aspx

正题如下…………………………………………………………………………

首先要区分json和js对象,在javascript中json的名和值都需要引号包裹的,比如{"a":"b"}; 而js对象,只有值必须包裹名可以包裹也可以不包裹,比如{a:"b"}这样是正确的{"a":"b"}这样也是正确的。

1、名值对使用单引号包裹

  因为平常都是用双引号包裹字符串的,所以我把要转化的字符串自然就写成这样子了。

var str="{'a':'1'}"

  然后当我兴奋的使用JSON.parse接收对象的时候,呃,报错了

var json=JSON.parse(str);

JSON.parse解析单引号名值对报错

  看到这个结果,也看不出来原因。着实郁闷了一会。忽然想到是不是单双引号的问题,对调下发现成功了。

2、名值对使用双引号包裹

var str='{"a":"1"}';
var json=JSON.parse(str);

  名值对使用双引号包裹发现成功了。

  JSON.parse解析单引号名值对报错

3、全部使用双引号包裹,当然这时候引号要转义

var str="{\"a\":\"1\"}";
var json=JSON.parse(str);

  结果也是成功的

 JSON.parse解析单引号名值对报错

结论:使用JSON的parse将json形式的字符串转化为json的时候,名值对都必须使用双引号包裹

ps:如果有哪位大神知道为什么,请邮件小弟