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字符串的相互转换的更多相关文章

  1. JSON对象、JSON字符串的相互转换

    JSON对象.JSON字符串的相互转换 json的格式: 第一种方式: 单一的json字符串,转换成json对象时,需要 eval('(' + json + ')');这样的格式,中间需要加括号 va ...

  2. javascript:json对象和json字符串的相互转换

    json对象和字符串的相互转换 //使用json中的parser方法转换: var str='{"name":"fendouer", "age&quo ...

  3. 前端中JSON对象和JSON字符串的相互转换

    资料来源: http://www.css88.com/archives/3919

  4. JavaScript对象、JSON对象、JSON字符串的区别

    一.首先看下什么是JSON JSON:JavaScript Object Natation,JavaScript对象的表现形式,已经发展成一种轻量级的数据交换格式. JavaScript对象的表现形式 ...

  5. C# 对象与JSON字符串互相转换的三种方式

    C# 对象与JSON字符串互相转换的三种方式 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 关于内存对象和JSON字符串的相互转换, ...

  6. 【JS对象、JSON字符串】之间的相互转换

    在Firefox,chrome,opera,safari,ie9,ie8等浏览器直接可以用JSON对象的stringify()和parse()方法. 1.JSON.stringify(obj)将JS对 ...

  7. json对象和json字符串之间的转换-JavaScript实现

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  8. JS中实现JSON对象和JSON字符串之间的相互转换

    对于主流的浏览器(比如:firefox,chrome,opera,safari,ie8+),浏览器自己提供了JSON对象,其中的parse和stringify方法实现了JSON对象和JSON字符串之间 ...

  9. JavaScript中JSON对象和JSON字符串的相互转化

    一.JSON字符串转换为JSON对象 var str = '{"name":"cxh","sex":"man",&quo ...

随机推荐

  1. JSON文件导入Unity3d中是空的的问题

    将Json文件的内容在网上在线的Json文件编辑器导出后再导入即可

  2. virtual、abstract、interface区别以及用法

    virtual 用于在基类中的使用的方法,使用的情况为:      情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法.那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法. ...

  3. 45.UITableView去除分割线

    1.去除所有的分割线 table.separatorStyle = UITableViewCellSelectionStyleNone; 2.去除指定某一行的分割线 cell.separatorIns ...

  4. 33、iOS10 由于权限问题导致崩溃的大坑

    控制台报忠告: This app has crashed because it attempted to access privacy-sensitive data without a usage d ...

  5. android 自动更新

    http://blog.csdn.net/zml_2015/article/details/50756703

  6. SQL MAP 注入测试

    SQL MAP是一款测试系统是否有SQL漏洞的工具 下载地址: http://sqlmap.org/ sqlmap 是一款使用python编写的工具,所以需要安装python,需要安装python 为 ...

  7. 微信小程序app.json配置

    找到app.json文件,找到window配置项 1.windows选项下导航栏样式 "navigationBarBackgroundColor":#F6F6F6 // 导航栏的背 ...

  8. windows socket扩展函数

    1.AcceptEx() AcceptEx()用于异步接收连接,可以取得客户程序发送的第一块数据. BOOL AcceptEx( _In_  SOCKET       sListenSocket,   ...

  9. 解决linux系统CentOS下调整home和根分区大小

    目标:将VolGroup-lv_home缩小到20G,并将剩余的空间添加给VolGroup-lv_root   1.首先查看磁盘使用情况 [root@localhost ~]# df -h 文件系统 ...

  10. zk可视化工具

    也是无意中接触到zk,搞得有点头大,之前都是通过crt连通服务后,在服务上通过命令去查看节点下的数据的,十分的不方便,后来发现了可视化工具这玩意儿还真的是好用,看节啊点下的数据啥的一目了然,我用过的有 ...