JSON 和 JavaScript eval使用说明


Posted in Javascript onJune 13, 2010

JSON 格式可以使对象(object)、数组(array)、值(value)、字符串(string)、数值(number)。

<script type="text/javascript"> 
var user = { 
"Name":"Andy", 
"Sex" :"man", 
"Age" :"20", 
"Phone":{"mobilephone":"123456789","telephone":"1234-12345678"}, 
"baby":[{"big":"xiaohong"},{"middle":"xiaoming"},{"small":"xiaoli"}] //包含数组 
} 
alert(user.Name); 
alert(user.Phone.mobilephone); 
alert(user.baby[0].big); 
user.baby[0].big = "--";//修改了 JSON 值 
alert(user.baby[0].big); 
</script>

参考:http://www.json.org/json-zh.html

下面来看看 JavaScript 的 eval 函数。

eval 函数会评估给定的一个JavaScript代码的字符串,并试图去执行包含在字符串里的表达式或者一系列的合法的 JavaScript 语句。eval 函数将把最后一个表达式或者语句包含的值或引用作为返回值。

代码

<script type="text/javascript"> 
var bar = "bar"; 
var foobar = eval('"foo"+bar'); 
alert(bar + foobar);//执行语句 
foobar = eval('if(bar = "bar"){bar = "foo-bar";}else{bar = "bar-foo";}'); 
alert(foobar);//返回语句中包含的值 
</script>

JSON 和 对象字面量(Object Literals)的区别:JSON 的名字部分严格用引号+名字来表示。
代码

<script type="text/javascript"> 
//对象字面量 
var objectLiteral = { 
name:"Objector.L", 
age:"24", 
special:"JavaScript", 
sayName:function(){ 
return this.name; 
} 
}; 
//JSON 对象 
var jsonFormat = { 
"summary":"Blogs", 
"blogrolls":[ 
{ 
"title":"Explore JavaScript", 
"link":"http://example.com" 
}, 
{ 
"title":"Explore JavaScript", 
"link":"http://example.com" 
} 
] 
}; 
</script>

由于 Ajax 的兴起, JSON 这种轻量级的数据格式作为客户端与服务器端之间传输的格式逐渐流行起来,进而出现的问题是如何将服务器端构建好的 JSON 数据转换为可用的 JavaScript 对象,利用 eval 函数无疑是一种简单而直接的方法。在转化的时候需要将 JSON 字符串的外面包装一层园括号:

var jsonObject = eval("("+ jsonFormat +")")

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

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

JSON 格式的名字部分为什么要加引号?因为eval函数会将{foo:"bar"}解释成合法的JavaScript 语句,而非表达式。但人们往往是想让eval将这段代码解释成一个对象。所以JSON 格式会强制你去在名字的外侧加上引号,再结合圆括号,eval就不会错误的将JSON解释成代码块。


//eval 错误解析语义 
alert(eval('{foo:"bar"}')); //return "bar",incorrect 
//eval 正确解析JSON 
alert(eval('({"foo":"bar"})'));//return JSON object,correct

Javascript 相关文章推荐
图片之间的切换
Jun 26 Javascript
也说JavaScript中String类的replace函数
Sep 22 Javascript
JQuery处理json与ajax返回JSON实例代码
Jan 03 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
Aug 06 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
Nov 13 Javascript
node.js express安装及示例网站搭建方法(分享)
Aug 22 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
Apr 07 Javascript
yarn的使用与升级Node.js的方法详解
Jun 04 Javascript
javascript 初学教程及五子棋小程序的简单实现
Jul 04 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
Jun 30 Javascript
vue使用swiper实现左右滑动切换图片
Oct 16 Javascript
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
ExtJS PropertyGrid中使用Combobox选择值问题
Jun 13 #Javascript
js null undefined 空区别说明
Jun 13 #Javascript
javascript dom代码应用 简单的相册[firefox only]
Jun 12 #Javascript
DOM Scripting中的图片切换[兼容Firefox]
Jun 12 #Javascript
由JavaScript技术实现的web小游戏(不含网游)
Jun 12 #Javascript
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
Jun 12 #Javascript
jquery form表单提交插件asp.net后台中文解码
Jun 12 #Javascript
You might like
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
php单一接口的实现方法
2015/06/20 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
PHP操作Redis数据库常用方法示例
2018/08/25 PHP
解决FireFox下[使用event很麻烦]的问题
2006/11/26 Javascript
JavaScript 动态添加表格行 使用模板、标记
2009/10/24 Javascript
eclipse导入jquery包后报错的解决方法
2014/02/17 Javascript
验证码在IE中不刷新而谷歌等浏览器正常的解决方案
2014/03/18 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
Angularjs 实现一个幻灯片示例代码
2016/09/08 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
js实现无缝滚动图
2017/02/22 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
在 Node.js 中使用原生 ES 模块方法解析
2017/09/19 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
vuex的数据渲染与修改浅析
2020/11/26 Vue.js
python 捕获shell脚本的输出结果实例
2017/01/04 Python
python实现redis三种cas事务操作
2017/12/19 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
什么是makefile? 如何编写makefile?
2013/01/02 面试题
法定代表人授权委托书
2014/04/04 职场文书
博士给导师的自荐信
2015/03/06 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书