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 相关文章推荐
FireFox中textNode分片的问题
Apr 10 Javascript
COM中获取JavaScript数组大小的代码
Nov 22 Javascript
javascript移动设备Web开发中对touch事件的封装实例
Jun 05 Javascript
JavaScript操作DOM元素的childNodes和children区别
Apr 01 Javascript
javascript异步处理工作机制详解
Apr 13 Javascript
vue实现添加标签demo示例代码
Jan 21 Javascript
vue 粒子特效的示例代码
Sep 19 Javascript
关于vue中的ajax请求和axios包问题
Apr 19 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
Nov 08 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
Jul 31 Javascript
原生JavaScript写出Tabs标签页的实例代码
Jul 20 Javascript
vue中三级导航的菜单权限控制
Mar 31 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
使用sockets:从新闻组中获取文章(二)
2006/10/09 PHP
PHP 高手之路(二)
2006/10/09 PHP
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
PHP7匿名类用法分析
2016/09/26 PHP
php实现文件管理与基础功能操作
2017/03/21 PHP
解决FireFox下[使用event很麻烦]的问题
2006/11/26 Javascript
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
js兼容火狐获取图片宽和高的方法
2015/05/21 Javascript
在浏览器中打开或关闭JavaScript的方法
2015/06/03 Javascript
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
vue2.0项目集成Cesium的实现方法
2019/07/30 Javascript
vue中使用vue-print.js实现多页打印
2020/03/05 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
JS访问对象两种方式区别解析
2020/08/29 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
香港迪士尼乐园酒店预订:Hong Kong Disneyland Hotels
2017/05/02 全球购物
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
计算机相关的自我评价
2014/01/15 职场文书
乌鸦喝水教学反思
2014/02/07 职场文书
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
英语辞职信范文
2015/02/28 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书
JavaScript实例 ODO List分析
2022/01/22 Javascript