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 相关文章推荐
解决表单中第一个非隐藏的元素获得焦点的一个方案
Oct 26 Javascript
jQuery ajax cache缓存问题
Jul 01 Javascript
学习并汇集javascript匿名函数
Nov 25 Javascript
javascript之典型高阶函数应用介绍二
Jan 10 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
Dec 24 Javascript
使用JavaScript获取电池状态的方法
May 03 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
Dec 17 Javascript
JavaScript仿支付宝6位数字密码输入框
Dec 29 Javascript
在Vue中使用echarts的方法
Feb 05 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
Dec 06 Javascript
vue导航栏部分的动态渲染实例
Nov 01 Javascript
一起深入理解js中的事件对象
Feb 06 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
摩卡咖啡
2021/03/03 咖啡文化
php输出全球各个时区列表的方法
2015/03/31 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
Yii2中Restful API原理实例分析
2016/07/25 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
Javascript 错误处理的几种方法
2009/06/13 Javascript
javascript 限制输入脚本大全
2009/11/03 Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
原生JS实现的跳一跳小游戏完整实例
2019/01/27 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
Python多线程学习资料
2012/12/19 Python
Python新手实现2048小游戏
2015/03/31 Python
python计算文本文件行数的方法
2015/07/06 Python
Python下载网络小说实例代码
2018/02/03 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
Python OpenCV读取png图像转成jpg图像存储的方法
2018/10/28 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
2018/12/15 Python
浅谈python标准库--functools.partial
2019/03/13 Python
通过实例解析Python调用json模块
2019/12/11 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
OpenCV中VideoCapture类的使用详解
2020/02/14 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
社区科普工作方案
2014/06/03 职场文书
小学五年级语文上册教学计划
2015/01/22 职场文书
小区物业管理2015年度工作总结
2015/10/22 职场文书
爱国之歌(8首)
2019/09/29 职场文书