JavaScript对象与JSON字符串的相互转换
JSON(JavaScript Object Notation) 是JavaScript编程语言的一个子集。正因JSON是JavaScript的一个子集,所以它可清晰的运用于此语言中。
- eval函数 JSON文本转换为对象
- 为了将JSON文本转换为对象,可以使用eval函数。eval函数调用JavaScript编辑器。由于JSON是JavaScript的子集,因此编译器将正确的解析文本并产生对象结构。文本必须括在括号中避免产生JavaScript的语法歧义。
var obj = eval('(' + JSONTest + ')');
eval函数非常快速。它可以编译执行任何JavaScript程序,因此产生了安全性问题。当使用可信任与完善的源代码时才可以使用eval函数。这样可以更安全的解析JSON文本。使用XmlHttp的web应用,页面之间的通讯只允许同源,因此是可以信任的。但这却不是完善的。如果服务器没有严谨的JSON编码,或者没有严格的输入验证,那么可能传送包括危险脚本的无效JSON文本。eval函数将执行恶意的脚本。 - JSON解释器 JSON.parse、JSON.stringify
- 使用JSON解析器可以防止像eval函数转换JSON文本为对象那样的安全隐患。JSON解析器只能辨识JSON文本,拒绝所有脚本。提供了本地JSON支持的浏览器的JSON解析器将远快于eval函数。
目前,Firefox、Opera、IE8以上版本也提供了本地JSON支持。其中,JSON解释器提供的函数有:JSON.parse、JSON.stringify。
对于那些并不提供本地JSON支持的浏览器可以引入脚本json2.js,来实现JSON转换功能。json2.js脚本可到https://github.com/douglascrockford/JSON-js/blob/master/json2.js页面下载。- JSON.parse 函数
- 将JSON文本转换为对象。
JSON.parse(text[, reviver])- 参数
- text
必选项。要转换为对象的JSON文本。
reviver
可选项。该参数是个替换函数。在转换中,遍历的每个节点,都将执行该函数,该函数的返回值将替代转换结果的相应节点值。
- JSON.stringify 函数
- 将对象转换为JSON文本。
JSON.stringify(value[, replacer[, space]])- 参数
- text
必选项。要转换为JSON文本的对象。
reviver
可选项。该参数是个替换函数。在转换中,遍历的每个节点,都将执行该函数,该函数的返回值将替代转换结果的相应节点值。
space
可选项。格式化输出JSON文本缩进的空格数量。如果不提供该参数将不会格式化输出。
- 参数reviver的委托类型
- reviver(key, value)
reviver函数的中的this是当前所遍历到的节点的父节点。当所遍历的是根节点的时候,父节点是个Object对象,根节点是该对象的一个属性,属性名是空字符串。- 参数
- key
当父节点是数组Object,key为数组索引,否则key为Object属性名。
value
节点值。
注:JSON不支持循环数据结构。
- JSON.parse、JSON.stringify使用示例
- <script type="text/javascript">
function InventoryItem(parm) {
this.Product = parm.Product
this.Quantity = parm.Quantity;
this.Price = parm.Price;
this.Type = parm.Type;
this.Total = function() {
return this.Price * this.Quantity;
}
}function Inventory(parm) {
this.Date = parm.Date;
this.Item = parm.Item;
this.Type = parm.Type;
this.Total = function() {
var count = 0;
for (var key in this.Item) {
count += this.Item[key].Total();
}
return count;
}
}var inventoryJSONText = "{\"Date\":\"2000-01-01\",\"Item\":[{\"Product\":\"ProductOne\",\"Quantity\":\"10\",\"Price\":\"10\",\"Type\":\"InventoryItem\"},{\"Product\":\"ProductTwo\",\"Quantity\":\"100\",\"Price\":\"20\",\"Type\":\"InventoryItem\"}],\"Type\":\"Inventory\"}";
//将JSON文本转换为对象,并将一般类的实例改成伪类的实例。
var inventoryObject = JSON.parse(inventoryJSONText, function(key, value) {
var type;
if (value && typeof value === 'object') {
type = value.Type;
if (typeof type === 'string' && typeof window[type] === 'function') {
return new (window[type])(value);
}
}
return value;
});//输出转换后对象的信息。
var output = "Product\t\tQuantity\tPrice\tTotal\n";
for (var key in inventoryObject.Item) {
var item = inventoryObject.Item[key];
output += item.Product + "\t" + item.Quantity + "\t\t" + item.Price + "\t" + item.Total() + "\n";
}
output += "\t\t\t\t\t" + inventoryObject.Total();
alert(output);//再将inventoryObject对象转换成JSON文本。
var inventoryJSONTextAgain = JSON.stringify(inventoryObject, null, 3);
alert(inventoryJSONTextAgain);
</script> - 来自:http://blog.163.com/luckcq@yeah/blog/static/171747707201110835533963/
JavaScript对象与JSON字符串的相互转换的更多相关文章
- JSON对象、JSON字符串的相互转换
JSON对象.JSON字符串的相互转换 json的格式: 第一种方式: 单一的json字符串,转换成json对象时,需要 eval('(' + json + ')');这样的格式,中间需要加括号 va ...
- javascript:json对象和json字符串的相互转换
json对象和字符串的相互转换 //使用json中的parser方法转换: var str='{"name":"fendouer", "age&quo ...
- 前端中JSON对象和JSON字符串的相互转换
资料来源: http://www.css88.com/archives/3919
- JavaScript对象、JSON对象、JSON字符串的区别
一.首先看下什么是JSON JSON:JavaScript Object Natation,JavaScript对象的表现形式,已经发展成一种轻量级的数据交换格式. JavaScript对象的表现形式 ...
- C# 对象与JSON字符串互相转换的三种方式
C# 对象与JSON字符串互相转换的三种方式 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 关于内存对象和JSON字符串的相互转换, ...
- 【JS对象、JSON字符串】之间的相互转换
在Firefox,chrome,opera,safari,ie9,ie8等浏览器直接可以用JSON对象的stringify()和parse()方法. 1.JSON.stringify(obj)将JS对 ...
- json对象和json字符串之间的转换-JavaScript实现
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- JS中实现JSON对象和JSON字符串之间的相互转换
对于主流的浏览器(比如:firefox,chrome,opera,safari,ie8+),浏览器自己提供了JSON对象,其中的parse和stringify方法实现了JSON对象和JSON字符串之间 ...
- JavaScript中JSON对象和JSON字符串的相互转化
一.JSON字符串转换为JSON对象 var str = '{"name":"cxh","sex":"man",&quo ...
随机推荐
- Windows事件日志报表 怎样备份数据库?
- Python之开发自动化管理工具paramiko
一.paramiko模块使用 1)远程执行主机命令获取结果 方法一 import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_ ...
- TOMCAT内存溢出及大小调整的实现方法
一.tomcat内存设置问题 收藏 在使用Java程序从数据库中查询大量的数据或是应用服务器(如tomcat.jboss,weblogic)加载jar包时会出现java.lang.OutOfMemor ...
- springboot深入学习(四)-----tomcat配置、websocket
一.更改servlet服务器 springboot中默认可以集成多种servlet容器,当引入如下依赖时: springboot默认以tomcat作为项目的servlet容器,如果用户想要替换tomc ...
- openstack路由管理命令
1.命令一览 [root@cc07 ~]# neutron help | grep route bgp-speaker-advertiseroute-list List routes advertis ...
- UVa 11762 Race to 1 (数学期望 + 记忆化搜索)
题意:给定一个整数 n ,然后你要把它变成 1,变换操作就是随机从小于等于 n 的素数中选一个p,如果这个数是 n 的约数,那么就可以变成 n/p,否则还是本身,问你把它变成 1 的数学期望是多少. ...
- python 基础_列表的其他操作 4
一.查找某个元素在数组中出现的次数 ,count的运用 a = ['a','b','c','c','c','a'] print(a.count('c')) 二.把一个元素插入到另一个元素的末尾,ext ...
- VESA时序与BT1120的区别
在实现内嵌传输的过程中,笔者参考VESA的时序,也就是下图,实现了一个内嵌同步的程序,同步码放在H Back Porch与H Front Porch的后端与前端,但是在传输过程中发现接收端画面不正常. ...
- Eclipse环境下如何配置tomcat,并且把项目部署到Tomcat服务器上
打开Eclipse,单击“Window”菜单,选择下方的“Preferences”. 单击“Server”选项,选择下方的“Runtime Environments”. 点击“Add”添加Tomca ...
- 禁止浏览器缓存js
方法:在js文件后加上数学随机数; Math.random() 比如:源代码为 <script src="./js/lib/require/require.js" data- ...