Hi,网页设计师综合门户欢迎您!
设为首页  加为收藏  我要投稿找回密码免责声明意见反馈

招聘精英个人求职推广网站网友作品网页特效动画欣赏网页素材酷站欣赏源码下载设计软件

  • 全站搜索
  • 新闻资讯
  • 网页教程
  • 平面教程
  • 程序设计
  • 视频教程
  • Flash教程

网页设计师提供网页设计、网站程序开发、系统开发等,请联系QQ 103198680

 您当前的位置:首页 > 阅读文章
网页设计师综合门户欢迎您!

JS操作JSON详细总结

刊登方式:转载   来源:网络  作者:  关键词:平面设计理念  更新时间:2017/8/11

  本篇文章主要是对JS操作JSON进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助

  在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式:

  1.一种为使用eval_r()函数。

  2. 使用Function对象来进行返回解析。

  在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。例如:

  JSON字符串:

  var str1 = '{ "name": "cxh", "sex": "man" }';

  JSON对象:

  var str2 = { "name": "cxh", "sex": "man" };

  第一种解决方法:

  var dataObj=eval_r("("+data+")");//转换为json对象

  为什么要 eval这里要添加 “("("+data+")");//”呢?

  原因在于:eval本身的问题。由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

  加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:

  alert(eval_r("{}"); // return undefined

  alert(eval_r("({})");// return object[Object]

  对于这种写法,在JS中,可以到处看到。

  如: (function()) {}(); 做闭包操作时等。

  var str1 = '{ "name": "cxh", "sex": "man" }';

  var data=eval_r("("+str1+")");//转换为json对象//data =(new

  alert (data.name);//会显示出cxh

  这里特别需要注意的是方式1中的eval_r()方法是动态执行其中字符串(可能是js脚本)的,这样很容易会造成系统的安全问题。所以可以采用一些规避了eval_r()的第三方客户端脚本库,比如JSON in JavaScript就提供了一个不超过3k的脚本库。

  第二种解决方法:

  第二种解析方式就是使用Function对象来完成,它的典型应用就是在JQUERY中的AJAX方法下的success等对于返回数据data的解析

  var str1 = '{ "name": "cxh", "sex": "man" }';

  var data = (Function("","return "+str1))();

  alert (data.name);//会显示出cxh

  详细出处参考:http://www.jb51.net/article/47401.htm