锁定老帖子 主题:字符串转换成json的三种方式
精华帖 (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所有浏览器中均抛异常,解析失败。而前两种方式则没问题。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-03-16
一直在用第一中,原来还有更优雅得写法
|
|
返回顶楼 | |
发表时间:2010-03-16
还有一种是解析字符串的key和value,并生成Object,这是Json官网比较推荐的一种方式,好处是提高了安全性。eval执行的代码有可能是恶意代码。
http://www.JSON.org/json_parse.js |
|
返回顶楼 | |
发表时间:2010-03-16
eval 那两个括号很邪恶,刚入门的时候被这个搞了半天。
而且YUI的compressor不推荐用此方式,对压缩混淆有影响 |
|
返回顶楼 | |
发表时间:2010-03-16
John Resig老大推荐用Crockford的json2js,可以参考
|
|
返回顶楼 | |
发表时间:2010-03-16
学了一年多的java web 开发今天又学了个新名词json
请问下json是一种数据类型吗? |
|
返回顶楼 | |
发表时间:2010-03-17
最后修改:2010-03-17
qinshujin 写道 学了一年多的java web 开发今天又学了个新名词json
请问下json是一种数据类型吗? 轻量级的数据传送格式 是一种文本格式 (保存数据和传送数据的一种方式)不是数据类型 |
|
返回顶楼 | |
发表时间:2010-03-17
每一种很不好!!!太危险了,AIR里不允许使用!还是第三种好
|
|
返回顶楼 | |
发表时间: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形式解析。 |
|
返回顶楼 | |
发表时间: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就换过来了。 |
|
返回顶楼 | |