JavaScript转换与解析JSON方法实例详解


Posted in Javascript onNovember 24, 2015

本文实例讲述了JavaScript转换与解析JSON方法。分享给大家供大家参考,具体如下:

json格式数据如下:

var json = { 'jquery': [{ "id": "1", "type": "ASP.NET", "title": "JSON全解析"}] }
    alert(json.jquery[0].id);
    alert(json.jquery[0].type);
    alert(json.jquery[0].title);

javascript解析json数据:

window.onload = function() {
 var json = { "China": "[{'City':'上海','value':'1'},{'City':'南京','value':'2'},{'City':'杭州','value':'3'},{'City':'武汉','value':'4'}]" }
 var datas = eval(json.China);
 for (var i = 0; i < datas.length; i++) 
 {
  alert(datas[i].City);
  alert(datas[i].value);
 }
}

补充:jQuery解析json方法:

使用eval函数来解析,jquery的each方法来遍历

用JQuery解析JSON数据的方法,作为JQuery异步请求的传输对象,JQuery请求后返回的结果是json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用JSONObject等插件封装的JSON对象,与此亦是大同小异,这里不再做说明。

这里首先给出JSON字符串集,字符串集如下:

var data=" 
{ 
root: 
[ 
  {name:'1',value:'0'}, 
  {name:'6101',value:'北京市'}, 
  {name:'6102',value:'天津市'}, 
  {name:'6103',value:'上海市'}, 
  {name:'6104',value:'重庆市'}, 
]
}";

这里以JQuery异步获取的数据类型——json对象和字符串为依据,分别介绍两种方式获取到的结果处理方式。

eval()

对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于eval()中执行一次。这种方式也适合以普通javascipt方式获取json对象,以下举例说明:

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

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

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

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

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

对于这种写法,在JS中,可以到处看到。如: (function()) {}(); 做闭包操作时等。

//输出root的子对象数量 
alert(dataObj.root.length);
$.each(dataObj.root,fucntion(idx,item){ 
  if(idx==0){ 
    return true; 
  } 
  //输出每个root子对象的名称和值 
  alert("name:"+item.name+",value:"+item.value); 
})

对于一般的js生成json对象,只需要将$.each()方法替换为for语句即可,其他不变。

服务器返回的JSON字符串

对于服务器返回的JSON字符串,如果jquery异步请求将type(一般为这个配置属性)设为“json”,或者利 用$.getJSON()方法获得服务器返回,那么就不需要eval()方法了,因为这时候得到的结果已经是json对象了,只需直接调用该对象即可,这里以$.getJSON方法为例说明数据处理方法:

$.getJSON("http://www.xxxx.com/",{param:"gaoyusi"},function(data){ 
  //此处返回的data已经是json对象 
  //以下其他操作同第一种情况 
  $.each(data.root,function(idx,item){ 
    if(idx==0){ 
      //同countinue,返回false同break 
      return true;
    } 
    alert("name:"+item.name+",value:"+item.value); 
  }); 
});

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

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

var json='{"name":"CJ","age":18}';
data =(new Function("","return "+json))();

此时的data就是一个会解析成一个json对象了。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
Nov 24 Javascript
jquery获取自定义属性(attr和prop)实例介绍
Apr 21 Javascript
JavaScript String 对象常用方法详解
May 13 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
Dec 08 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
Feb 18 Javascript
JavaScript用二分法查找数据的实例代码
Jun 17 Javascript
深入解析Vue 组件命名那些事
Jul 18 Javascript
在Vue项目中引入腾讯验证码服务的教程
Apr 03 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
Jul 10 jQuery
vue 指令和过滤器的基本使用(品牌管理案例)
Nov 04 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
Jun 06 jQuery
JS实现按比例缩小图片宽高
Aug 24 Javascript
jQuery实现带分组数据的Table表头排序实例分析
Nov 24 #Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
Nov 24 #Javascript
JS获取数组最大值、最小值及长度的方法
Nov 24 #Javascript
基于jquery实现日历签到功能
Sep 11 #Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
Nov 24 #Javascript
如何解决ligerUI布局时Center中的Tab高度大小
Nov 24 #Javascript
JS实现图片高亮展示效果实例
Nov 24 #Javascript
You might like
PHP SPL标准库之SplFixedArray使用实例
2015/05/12 PHP
PHP Hash算法:Times33算法代码实例
2015/05/13 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
2016/10/29 PHP
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
jquery实现图片左右间隔滚动特效(可自动播放)
2013/05/08 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
AngularJs expression详解及简单示例
2016/09/01 Javascript
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
JS中如何实现复选框全选功能
2016/12/19 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
Ionic2开发环境搭建教程
2020/08/20 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
详解javascript replace高级用法
2019/02/17 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
python下如何让web元素的生成更简单的分析
2008/07/17 Python
Python下的Mysql模块MySQLdb安装详解
2014/04/09 Python
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
使用Python生成随机密码的示例分享
2016/02/18 Python
python使用arcpy.mapping模块批量出图
2017/03/06 Python
Python实现k-means算法
2018/02/23 Python
详解python的四种内置数据结构
2019/03/19 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
canvas需要在标签里直接定义宽高
2014/12/17 HTML / CSS
元宵节主持词
2014/03/25 职场文书
副董事长岗位职责
2014/04/02 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
股指期货心得体会
2014/09/10 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python
python基础之错误和异常处理
2021/10/24 Python
python实现会员管理系统
2022/03/18 Python
海弦WR-800F
2022/04/05 无线电