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 相关文章推荐
js checkbox(复选框) 使用集锦
Apr 28 Javascript
谈谈JavaScript中function多重理解
Aug 28 Javascript
web前端开发JQuery常用实例代码片段(50个)
Aug 28 Javascript
Zabbix添加Node.js监控的方法
Oct 20 Javascript
js判断出两个字符串最大子串的函数实现方法
Nov 01 Javascript
Angular弹出模态框的两种方式
Oct 19 Javascript
Vue中添加手机验证码组件功能操作方法
Dec 07 Javascript
vue自定义tap指令及tap事件的实现
Sep 18 Javascript
js计算两个日期间的天数月的实例代码
Sep 20 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
Oct 24 Javascript
js实现文字头像的生成代码
Mar 07 Javascript
vue 路由懒加载中给 Webpack Chunks 命名的方法
Apr 24 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 max_execution_time执行时间问题
2011/07/17 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
详解JavaScript中数组的相关知识
2015/07/29 Javascript
js命名空间写法示例
2015/12/18 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
关于javascript获取内联样式与嵌入式样式的实例
2017/06/01 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
2020/09/22 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
[01:09:20]NB vs NAVI Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
python基于queue和threading实现多线程下载实例
2014/10/08 Python
python hook监听事件详解
2018/10/25 Python
python3实现点餐系统
2019/01/24 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
Django分页功能的实现代码详解
2019/07/29 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
解决python gdal投影坐标系转换的问题
2020/01/17 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
英国领先的餐饮折扣俱乐部:Gourmet Society
2020/07/26 全球购物
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
房地产融资计划书
2014/01/10 职场文书
优秀小学生家长评语
2014/01/30 职场文书
学生请假条
2014/04/11 职场文书
2015年副班长工作总结
2015/05/15 职场文书
年会主持人开场白台词
2015/05/29 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python