skylar艺璇

关于JSON对象的兼容性和一些小问题

JSON对象在我们的数据请求中使用的很广泛。准确的了解一些JSON对象的方法和兼容性问题,可以在我们实现数据交互的时候事半功倍。

一、JSON对象的一些方法

  • JSON.parse()解析JSON字符串返回解析后的JSON对象;
  • JSON.stringify()返回指定JSON对象的字符串形式;

二、JSON对象的兼容性问题

IE8+才会支持JSON对象。我们可以通过代码自己模拟原生的JSON对象:模拟原生JSON对象

[eval和new Function]

看模拟原生JSON对象的实现我们可以看到实现思路:

1
2
eval(str)
(new Function('return'+str))()

当我们实际的操作一下,还是会有些小问题的.

三、一些小问题:

(1)利用eval()函数解析JSON对象:

1
2
// SyntaxError: Unexpected token :
eval('{"name":"skylar"}')

这是为什么呢?其实是{}做的怪。{}的用处无非两个,(1)用于创建对象;(2)创建代码块,并且当{}位于语句的开头时,代码就会被当成代码块来解析。这里eval()中明显就是把对象当成代码块来解析了,所以就报错了。

解决方法:

1
2
3
4
// {"name": "skylar"}并且注意JSON中的key和value要使用双引号,避免出错
eval("(" + str + ")");
//或
eval('0,' + str);

(2)JSON.parse()不允许逗号结尾:

1
2
3
// both will throw a SyntaxError
JSON.parse("[1, 2, 3, 4, ]");
JSON.parse("{ \"foo\" : 1, }");

四、参考资料:

JSON.stringify

JSON.parse

JSON对象