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. Linux top命令排序

    在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 Linux 中,可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会以 ...

  2. DVD管理器集合版

    利用所学的集合写出的DVD管理系统,运用到了所学到集合基础. import java.text.ParseException; import java.text.SimpleDateFormat; i ...

  3. YCSB测试Mysql,MongoDB,TokuMX,Couchbase性能

    测试是由同事完成的,这里只做收藏. 测试说明: 1.数据量为3kw记录,每条记录11个字段,一个为主键,主键为字符类型,类似:user****,后续为数值 其他10字段为字符类型,100字符,记录长度 ...

  4. projecteuler Summation of primes

    The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. Find the sum of all the primes below two milli ...

  5. Java是目前最广泛的_______编程语言

    计算机网络 注意:在配置环境变量时,classpath是为找文件服务的

  6. Rasterizer Stage(读书笔记3 --- Real-Time rendering)

    rasterizer stage的目标:计算和设置每个像素的颜色.将屏幕空间的二维顶点和每个顶点的shading信息转换为屏幕上的像素. rasterizer stage可以分为几个阶段:triang ...

  7. Processing与Java混编初探

    Processing其实是由Java开发出的轻量级JAVA开发语言,主要用于做原型,有setup.draw两个主接口和几个消息相应接口 Processing和Java混编很简单...在Java中引入外 ...

  8. iOS不用调用,running time自动执行方法

    拿友盟举例子 友盟比较好使,友盟看了他们的文档 他告诉你你要在 appdelegate didFinishLaunch方法里面写了这个东西 [UMSocialData setAppKey:@" ...

  9. 多媒体(2):WAVE文件格式分析

    目录 多媒体(1):MCI接口编程 多媒体(2):WAVE文件格式分析 多媒体(3):基于WindowsAPI的视频捕捉卡操作 多媒体(4):JPEG图像压缩编码 多媒体(2):WAVE文件格式分析

  10. listview侧滑菜单swipemenulistview的简单使用

    先看代码: public class MainActivity extends AppCompatActivity { private SwipeMenuListView list; private ...