论坛首页 Web前端技术论坛

字符串转换成json的三种方式

浏览 16108 次
精华帖 (1) :: 良好帖 (2) :: 新手帖 (1) :: 隐藏帖 (10)
作者 正文
   发表时间:2010-03-14   最后修改:2010-08-16

使用ajax的开发项目过程中,经常需要将json格式的字符串返回到前端,前端解析成js对象(JSON )。

 

ECMA-262(E3) 中没有将JSON概念写到标准中,还好在 ECMA-262(E5) 中JSON的概念被正式引入了,包括全局的JSON对象和Date的toJSON方法。

 

1,eval方式解析,恐怕这是最早的解析方式了。如下:

 

function strToJson(str){
     var json = eval('(' + str + ')');
     return json;
}

 

记得别忘了str两旁的小括号。

 

2,new Function形式,比较怪异哦。如下

 

function strToJson(str){
    var json = (new Function("return " + str))();
    return json;
}

 

3,使用全局的JSON对象,如下:

 

function strToJson(str){
    return JSON.parse(str);
}

 

目前 IE8(S)/Firefox3.5+/Chrome4/Safari4/Opera10 已实现了该方法,以下是部分资料:

 

http://blogs.msdn.com/ie/archive/2008/09/10/native-json-in-ie8.aspx

https://developer.mozilla.org/en/Using_JSON_in_Firefox

 

使用JSON.parse需严格遵守JSON规范,如属性都需用引号引起来,如下

 

var str = '{name:"jack"}';
var obj = JSON.parse(str); // --> parse error
 

name没有用引号引起来,使用JSON.parse所有浏览器中均抛异常,解析失败。而前两种方式则没问题。

 

 

另见:Chrome中JSON.parse的特殊实现

 

 

 

   发表时间:2010-03-16  
一直在用第一中,原来还有更优雅得写法
0 请登录后投票
   发表时间:2010-03-16  
还有一种是解析字符串的key和value,并生成Object,这是Json官网比较推荐的一种方式,好处是提高了安全性。eval执行的代码有可能是恶意代码。

http://www.JSON.org/json_parse.js
0 请登录后投票
   发表时间:2010-03-16  
eval 那两个括号很邪恶,刚入门的时候被这个搞了半天。

而且YUI的compressor不推荐用此方式,对压缩混淆有影响
0 请登录后投票
   发表时间:2010-03-16  
John Resig老大推荐用Crockford的json2js,可以参考
0 请登录后投票
   发表时间:2010-03-16  
学了一年多的java web 开发今天又学了个新名词json
  请问下json是一种数据类型吗?
0 请登录后投票
   发表时间:2010-03-17   最后修改:2010-03-17
qinshujin 写道
学了一年多的java web 开发今天又学了个新名词json
  请问下json是一种数据类型吗?

轻量级的数据传送格式 是一种文本格式 (保存数据和传送数据的一种方式)不是数据类型
0 请登录后投票
   发表时间:2010-03-17  
每一种很不好!!!太危险了,AIR里不允许使用!还是第三种好
0 请登录后投票
   发表时间:2010-03-17   最后修改:2010-03-17
RednaxelaFX 写道
John Resig老大推荐用Crockford的json2js,可以参考


呵,这个说法不对。
1,(EMCA262-V5)明确规定了对JSON本地支持,所以首选是原生态的JSON.parse方法
2, eval解析存在bug,见http://dev.jquery.com/ticket/4680

ps:jq1.4.1后加入了parseJSON方法,先使用JSON.parse解析,浏览器不支持则使用new Function形式解析。
0 请登录后投票
   发表时间:2010-03-17  
zhouyrt 写道
RednaxelaFX 写道
John Resig老大推荐用Crockford的json2js,可以参考


呵,这个说法不对。
1,(EMCA262-V5)明确规定了对JSON本地支持,所以首选是原生态的JSON.parse方法
2, eval解析存在bug,见http://dev.jquery.com/ticket/4680

ps:jq1.4.1后加入了parseJSON方法,先使用JSON.parse解析,浏览器不支持则使用new Function形式解析。

json2.js本来就会在浏览器原生支持JSON.parse的时候选用原生版本,而且它跟ES5是API兼容的。在ES5还没完全普及的现状下,John Resig老大推荐用json2.js主要是为了现在就能用跟ES5兼容的API,日后能平滑过渡到ES5——只要去掉一个import就换过来了。
1 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics