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

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

复制代码代码如下:
function strToJson(str){ 
var json = eval('(' + str + ')'); 
return json; 

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

这里属性名可以使用数字,可以带引号也可以不带引号。如果属性名是纯数字,生成的对象属性可以用下表运算符[]来访问,不能用obj.123这样的方式访问。

         var str1 = "{\"fa\":123,fb:333,\"fc\":\"xxx\",123:'xyz'}";
var obj1 = eval("(" + str1 + ")");
document.writeln("obj1.fa=" + obj1.fa);
document.writeln("obj1.fb=" + obj1.fb);
document.writeln("obj1.fc=" + obj1.fc);
//document.writeln("obj1.123=" + obj1.123);//语法错误
document.writeln("obj1[fa]=" + obj1["fa"]);
document.writeln("obj1[fb]=" + obj1["fb"]);
document.writeln("obj1[fc]=" + obj1["fc"]);
document.writeln("obj1[123]=" + obj1[123]);
document.write("<br/>");

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

复制代码代码如下:
function strToJson(str){ 
var json = (new Function("return " + str))(); 
return json; 
         var str2 = "{\"fa\":123,fb:333,\"fc\":\"xxx\",123:'xyz'}";
var obj2 = (new Function("return" + str2))();
document.writeln("obj2.fa=" + obj2.fa);
document.writeln("obj2.fb=" + obj2.fb);
document.writeln("obj2.fc=" + obj2.fc);
//document.writeln("obj1.123=" + obj1.123);
document.writeln("obj2[fa]=" + obj2["fa"]);
document.writeln("obj2[fb]=" + obj2["fb"]);
document.writeln("obj2[fc]=" + obj2["fc"]);
document.writeln("obj2[123]=" + obj2[123]);
document.write("<br/>");

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所有浏览器中均抛异常,解析失败。而前两种方式则没问题。 另外必须用双引号包围属性名,单引号会有解析错误,范例:

         var str3 = "{\"fa\":123,\"fb\":333,\"fc\":\"xxx\",\"123\":321}";
var obj3 = JSON.parse(str3);
document.writeln("obj3.fa=" + obj3.fa);
document.writeln("obj3.fb=" + obj3.fb);
document.writeln("obj3.fc=" + obj3.fc);
//document.writeln("obj1.123=" + obj1.123);
document.writeln("obj3[fa]=" + obj3["fa"]);
document.writeln("obj3[fb]=" + obj3["fb"]);
document.writeln("obj3[fc]=" + obj3["fc"]);
document.writeln("obj3[123]=" + obj3[123]);
document.write("<br/>"); try{
var str4 = "{fa:123,\"fb\":333,\"fc\":\"xxx\",\"123\":321}";
var obj4 = JSON.parse(str4);
} catch (err) {
document.write(err.name+":"+err.message);
}
document.write("<br/>");
try{
var str5 = "{'fa':123,\"fb\":333,\"fc\":\"xxx\",\"123\":321}";
var obj5 = JSON.parse(str4);
} catch (err) {
document.write(err.name + ":" + err.message);
}

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

使用js把json字符串转为js对象的方法的更多相关文章

  1. JS中将json字符串转为json对象的三种方式

    第一种:利用JSON的parse方法,即jsonObj=JSON.parse(jsonStr); 第二种:jsonObj = eval('(' + jsonStr+ ')'); 第三种:比较难理解:j ...

  2. js 把json字符串转为json对象

       <input type="hidden" name="data" id="data" value='[{"name&q ...

  3. json字符串转java对象

    今天遇到一个问题,前端ajax获取到一个javaBean对象,好多方法发ajax请求需要把这个对象再传到后端,后端再根据这个对象进行操作(之前计划传递id,但发现传递id的话,后端多个方法都需要根据i ...

  4. js中Json字符串如何转成Json对象(4种转换方式)

    js中Json字符串如何转成Json对象(4种转换方式) 一.总结 一句话总结:原生方法(就是浏览器默认支持的方法) 浏览器支持的转换方式(Firefox,chrome,opera,safari,ie ...

  5. JSON字符串和JS对象之间的转换

    JSON字符串和JS对象之间的转换 1 json字符串转换为js对象 1.1 标准json格式字符串转换为Js对象  JSON字符串 str JSON.parse(str) eval(str) eva ...

  6. js将json字符串转化成json对象的方法

    js将json字符串转化成json对象的方法: JSON.parse(jsonObject)

  7. js中json字符串转成js对象

    json字符串转成js对象我所知的方法有2种: //json字符串转换成json对象 var str_json = "{name:'liuchuan'}"; //json字符串 / ...

  8. js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)

    js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...

  9. JSON字符串转为JSON对象

    在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是对象,所以,JSON对象(js对象)和JSON字符串之间的相互转换是关键. JSON可以有两种格式,一种是对象格式的,另一种是数 ...

随机推荐

  1. SplendidCRM中给来自EditView中的listbox控件设置选中值或数据源

    DropDownList list = this.findContol("aas") as DropDownList;list.DataSource = new DataTable ...

  2. Python Quick list dir

    昨天 Python释放了 3.5 ,添加了 os.scandir 根据文档该API比os.listdir快Docs which speeds it up by 3-5 times on POSIX s ...

  3. Java设计模式1——策略模式(Strategy Pattern)

    最近觅得一本好书<您的设计模式>,读完两章后就能断言,一定是一头极品屌丝写的,而且是专写给开发屌丝男的智慧枕边书,小女子就委屈一下,勉强看看,人笨,谁让他写得这么通俗易懂呢!为了加深理解, ...

  4. js正则表达式(常用)

    正则表达式(常用) 写法 js写法 var re = new RegExp("a","i"); perl写法 var re = /a/ ; 量词 {n} 正好出 ...

  5. oracle批量修改多个表的数据

    方法一 写PL/SQL,开cursor declare  l_varID varchar2(20);  l_varSubName varchar2(30);  cursor mycur is sele ...

  6. Thinkphp源码分析系列(三)– App应用程序类

    // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO ...

  7. 史上最强大的40多个纯CSS绘制的图形

    Square(正方形) #square { width: 100px; height: 100px; background: red; } Rectangle(矩形) #rectangle { wid ...

  8. 简单配置webpack自动刷新浏览器

    文档地址  http://webpack.github.io/docs/usage.html 首先全局安装webpack(我这里使用的是淘宝的cnpm) cnpm install webpack 检查 ...

  9. 第六百一十八天 how can I 坚持

    此刻好烦,乱七八糟的,红米2死机也没弄好,哎. 下周三去长城,感觉还有很大提升空间啊,什么都不会.哎. 眼累的不行了,得抓紧睡觉了.ls他们来北京开年会了.. 明天,zjp来找我玩呢. 睡觉了.累.

  10. 利用cubieboard设置samba打印服务器

    #注意安装下面软件前,先将cubieboard的动态地址改为静态地址! apt-get install samba #安装samba vi /etc/samba/smb.conf //配置 workg ...