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 相关文章推荐
jQuery图片播放8款精美插件分享
Feb 17 Javascript
js实现获取焦点后光标在字符串后
Sep 17 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
Nov 17 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
Mar 04 Javascript
readonly和disabled属性的区别
Jul 26 Javascript
AngularJS辅助库browserTrigger用法示例
Nov 03 Javascript
javascript入门之数组[新手必看]
Nov 21 Javascript
node 命令方式启动修改端口的方法
May 12 Javascript
angularjs通过过滤器返回超链接的方法
Oct 26 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
Jan 22 Javascript
vue 设置 input 为不可以编辑的实现方法
Sep 19 Javascript
JS apply用法总结和使用场景实例分析
Mar 14 Javascript
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/12/03 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
2014/08/28 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
js判断undefined变量类型使用typeof
2013/06/03 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
js读写json文件实例代码
2014/10/21 Javascript
浅析JavaScript中的事件机制
2015/06/04 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
2015/09/25 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
javascript实现的左右无缝滚动效果
2016/09/19 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
2016/10/21 Javascript
JavaScript对JSON数据进行排序和搜索
2017/07/24 Javascript
Vue利用canvas实现移动端手写板的方法
2018/05/03 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
python网络编程实例简析
2014/09/26 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
2020/07/20 Python
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
python安装scipy的方法步骤
2019/06/26 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
python range实例用法分享
2020/02/06 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
日语专业个人的求职信
2013/12/03 职场文书
二手房买卖协议书
2014/04/10 职场文书
社区关爱留守儿童活动方案
2014/08/22 职场文书
2014年社区国庆节活动方案
2014/09/16 职场文书
教师岗位职责
2015/02/03 职场文书
2016中秋节月饼促销广告语
2016/01/28 职场文书
初三语文教学反思
2016/03/03 职场文书
MySQL通过binlog恢复数据
2021/05/27 MySQL
Python字典的基础操作
2021/11/01 Python
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis