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. slickedit的alias配置

    使用slickedit很喜欢它的多语言支持,可以快速查看变量的定义和结构.我一般写verilog较多,使用emcas很方便,但是感觉查看代码结构不太方便(也可能是我不会设置).所以希望能够在slick ...

  2. RDD常用方法之subtract&intersection&cartesian

    subtract Return an RDD with the elements from `this` that are not in `other` .     def subtract(othe ...

  3. 基于JS功能强大的日期插件Kalendae

    开发中需要一个日期插件,可以在zepto下使用,可以选择日期段,可以设置不可选日期 找到一个完全满足的,并且基于JS不依赖于任何库. 在线演示:http://chipersoft.com/Kalend ...

  4. IOS 中openGL使用教程1(openGL ES 入门篇 | 搭建openGL环境)

    OpenGL版本 iOS系统默认支持OpenGl ES1.0.ES2.0以及ES3.0 3个版本,三者之间并不是简单的版本升级,设计理念甚至完全不同,在开发OpenGL项目前,需要根据业务需求选择合适 ...

  5. PullToRefreshListView加载更多定位的解决方法

    之前项目里,早起用到了PullToRefreshListView,后来一部分用到了RefreshListView,最近在做优化的时候,其中一个问题就是PullToRefreshlistView上拉加载 ...

  6. c++学习--面向对象一

    类与对象一 一 注意的点 1 利用构造函数给数据成员初始化的两种办法:1 赋值语句,2 用成员初始化列表 解释:1 成员初始化列表的一般形式为: 数据成员名1(初始值1),数据成员名2(初始值2) 2 ...

  7. AX7: CREATE AN AUTOMATED TEST PACKAGE\MODEL

    AX7: CREATE AN AUTOMATED TEST PACKAGE\MODEL It’s really important for a stable solution the use of a ...

  8. iOS 趣谈设计模式——通知

    [前言介绍] iOS的一种设计模式,观察者Observer模式(也叫发布/订阅,即Publich/Subscribe模式). 观察者模式,包含了通知机制(notification)和KVO(Key-v ...

  9. javascript-with()方法

    1)简要说明         with 语句可以方便地用来引用某个特定对象中已有的属性,但是不能用来给对象添加属性.要给对象创建新的属性,必须明确地引用该对象. 2)语法格式  with(object ...

  10. ansible playbook 示例

    http://blog.keshi.org/hogememo/2015/12/07/exploiting-ansible-jinja2 http://blog.keshi.org/hogememo/2 ...