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 相关文章推荐
javascript计算星座属相(十二生肖属相)示例代码
Jan 09 Javascript
JavaScript二维数组实现的省市联动菜单
May 08 Javascript
jquery+easeing实现仿flash的载入动画
Mar 10 Javascript
移动开发之自适应手机屏幕宽度
Nov 23 Javascript
Vue异步组件使用详解
Apr 08 Javascript
利用 spin.js 生成等待效果(js 等待效果)
Jun 25 Javascript
node.js + socket.io 实现点对点随机匹配聊天
Jun 30 Javascript
JavaScript中的一些隐式转换和总结(推荐)
Dec 22 Javascript
JS实现的贪吃蛇游戏案例详解
May 01 Javascript
vue动态绑定class的几种常用方式小结
May 21 Javascript
JS中实现一个下载进度条及播放进度条的代码
Jun 10 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
May 13 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
web方式ftp
2006/10/09 PHP
PHP生成不重复标识符的方法
2014/11/21 PHP
JS实现淘宝幻灯片效果的实现方法
2013/03/22 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
Angular获取手机验证码实现移动端登录注册功能
2017/05/17 Javascript
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
JS错误处理与调试操作实例分析
2020/04/13 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
electron踩坑之remote of undefined的解决
2020/10/06 Javascript
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
Python获取二维矩阵每列最大值的方法
2018/04/03 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
python psutil监控进程实例
2019/12/17 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
英国当代时尚和街头服饰店:18montrose
2018/12/15 全球购物
跟单文员的岗位职责
2013/11/14 职场文书
小学生关于梦想的演讲稿
2014/08/22 职场文书
教师个人教学总结
2015/02/11 职场文书
舞出我人生观后感
2015/06/16 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
React 高阶组件HOC用法归纳
2021/06/13 Javascript
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫
golang为什么要统一错误处理
2022/04/03 Golang
Golang 实现WebSockets
2022/04/24 Golang
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技