使用js把json字符串转为js对象的方法
ECMA-262(E3) 中没有将JSON概念写到标准中,还好在 ECMA-262(E5)中JSON的概念被正式引入了,包括全局的JSON对象和Date的toJSON方法。
1,eval方式解析,恐怕这是最早的解析方式了。如下:
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形式,比较怪异哦。如下
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对象,如下:
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 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);
}
使用js把json字符串转为js对象的方法的更多相关文章
- JS中将json字符串转为json对象的三种方式
第一种:利用JSON的parse方法,即jsonObj=JSON.parse(jsonStr); 第二种:jsonObj = eval('(' + jsonStr+ ')'); 第三种:比较难理解:j ...
- js 把json字符串转为json对象
<input type="hidden" name="data" id="data" value='[{"name&q ...
- json字符串转java对象
今天遇到一个问题,前端ajax获取到一个javaBean对象,好多方法发ajax请求需要把这个对象再传到后端,后端再根据这个对象进行操作(之前计划传递id,但发现传递id的话,后端多个方法都需要根据i ...
- js中Json字符串如何转成Json对象(4种转换方式)
js中Json字符串如何转成Json对象(4种转换方式) 一.总结 一句话总结:原生方法(就是浏览器默认支持的方法) 浏览器支持的转换方式(Firefox,chrome,opera,safari,ie ...
- JSON字符串和JS对象之间的转换
JSON字符串和JS对象之间的转换 1 json字符串转换为js对象 1.1 标准json格式字符串转换为Js对象 JSON字符串 str JSON.parse(str) eval(str) eva ...
- js将json字符串转化成json对象的方法
js将json字符串转化成json对象的方法: JSON.parse(jsonObject)
- js中json字符串转成js对象
json字符串转成js对象我所知的方法有2种: //json字符串转换成json对象 var str_json = "{name:'liuchuan'}"; //json字符串 / ...
- js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)
js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...
- JSON字符串转为JSON对象
在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是对象,所以,JSON对象(js对象)和JSON字符串之间的相互转换是关键. JSON可以有两种格式,一种是对象格式的,另一种是数 ...
随机推荐
- SQL Server 2008 R2企业版开发版等版本下载 (转载)
一. 简体中文 1. SQL Server 2008 R2 Developer (x86, x64, ia64) - DVD (Chinese-Simplified) File Name: cn_sq ...
- 九、数据库——sql server 2008导入excel
昨天分配给我一个活,让我手动录入新闻网页的数据,包括每条新闻的标题.时间和链接. 一开始,就是按照最原始的手动录入的方法,一条条的录入.发现这简直就是在浪费时间,于是就想了一种新方法. 1.将网页中的 ...
- WINDOWS Server2008上部署Oracle10g及oracle SQL语法小记
首先安装10G客户端 情况一:一般都会安装到一般报错.因为10G是32BIT客户端.而操作系统是64位的.但是不会影响配置监听程序.自主开发的应用程序依然可以运行. 情况二:报错但是配置完监听程序始终 ...
- Delete Exists
Create PROCEDURE [dbo].[LVS_Update_WaferInfo] @LotId varchar(40), @xmlData xmlasBEGIN delete W from ...
- canvas内容
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [python学习] 介绍python的property,以及为什么要用setter,一个小栗子
python中的property是比较好用的. 先来一段代码 #-*- coding:utf-8 -*- class C(object): status_dict = { 1: 'accept', 2 ...
- 编译FFmpeg成一个SO库<转>
转帖地址:http://www.ihubin.com/blog/android-ffmpeg-demo-3/ ============================================= ...
- DataRow循环取出
string strName = null; DataRow dRow = DB.GetDataRow(Sql语句); if (null != dRow) { foreach (DataRow ite ...
- androidstudio 配置git和github
git是版本控制工具 github是一个网站,git可以把项目上传至这个网站 1:先下载git,并且安装,一般默认即可,安装成功可以点击电脑右键出现 2:生成id_rsa.pub, 配置账号和邮箱 点 ...
- php中的魔术方法
__construct 构造器是一个魔术方法,当对象被实例化时它会被调用.在一个类声明时它常常是第一件做的事但是没得必要他也像其他任何方法在类中任何地方都可以声明,构造器也能像其他方法样继承.如果我们 ...