关于 javascript 字符串解析为JSON 对象

早前 对于json 格式的字符转 一直使用的是 eval()

在看到一篇文章 eval 的安全隐患, 也就是说 eval(json) 中的数据可能已经被篡改。

为了修正这玩意 于是查了查

 

我查到的 有三种方式

eval()

eval( "(" + jsonString + ")" );

 

new function()

new Function( "return " + jsonString )();

 

JSON.parse

JSON.parse( jsonString );

 

当然 前面两种自然是不推荐。 下面是浏览器 对JSON.parse的支持情况

比较老了 不过还是能说明问题。 总不可能老版本支持 新版本不支持吧

JSON textThis implementation FF 3.6.6FF 4.0 betaIE8IE9 BetaOpera 11 (build 1055)Chrome 6.0.472Safari 5 (6533.16)json2 in FF 3.6.6
JSON.parse -   Yes Yes Yes Yes Yes Yes Yes Yes
JSON.parse(''); -   SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
eval('6 * 6') == 36; -   SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
"str", "str" -   SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
""" -   SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
"\" -   SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
"\u0000" -   Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0001" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0002" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0003" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0004" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0005" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0006" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0007" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0008" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0009" -   Allowed syntax SyntaxError Allowed syntax SyntaxError Allowed syntax SyntaxError Allowed syntax Allowed syntax
"\u000a" -   Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
"\u000b" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u000c" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u000d" -   Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
"\u000e" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u000f" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0010" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0011" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0012" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0013" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0014" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0015" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0016" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0017" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0018" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u0019" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u001a" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u001b" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u001c" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u001d" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u001e" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\u001f" -   Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
"\xF1" -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
"\101" -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
+2 -   Allowed syntax Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
2. -   Allowed syntax Allowed syntax Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
.2 -   Allowed syntax Allowed syntax Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
00 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
01 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
02 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
03 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
04 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
05 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
06 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
07 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
08 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
09 -   Allowed syntax Allowed syntax SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax
0xFF -   SyntaxError - SyntaxError SyntaxError - SyntaxError - SyntaxError
{property : false} -   SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
{'property' : false} -   SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
{2 : false} -   SyntaxError - - - - SyntaxError - Allowed syntax
{true : false} -   SyntaxError - - - - SyntaxError - Allowed syntax
{false : false} -   SyntaxError - - - - SyntaxError - Allowed syntax
{null : false} -   SyntaxError - - - - SyntaxError - Allowed syntax
{"property" : "value",} -   Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
["value", "value",] -   Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u000B] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax Allowed syntax
[\u000C] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError Allowed syntax Allowed syntax
[\u00A0] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\uFEFF] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
[\u1680] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
[\u180E] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
[\u2000] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2001] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2002] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2003] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2004] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2005] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2006] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2007] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2008] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u2009] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u200A] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax
[\u202F] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
[\u205F] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError SyntaxError
[\u3000] -   SyntaxError SyntaxError Allowed syntax SyntaxError SyntaxError SyntaxError SyntaxError Allowed syntax

 

这个图表中 没有提到IE6,7,8(Q)

JSON 是 ECMA-262(ECMAScript)第5版 在09年。(应该是吧)

所以IE6,7,8(Q) 肯定是不支持的

 

于是 还是只能启用 eval() 和 new function() 。 不过要做好验证

当然 你可以用其他js 框架中的json解析

posted @ 2012-03-14 18:13  CallMeTommy  阅读(508)  评论(0)    收藏  举报