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 相关文章推荐
Prototype使用指南之base.js
Jan 10 Javascript
刷新页面实现方式总结(HTML,ASP,JS)
Nov 13 Javascript
javascript 禁止复制网页
Jun 11 Javascript
Javascript学习笔记8 用JSON做原型
Jan 11 Javascript
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
Jun 19 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
Nov 21 Javascript
js格式化时间和js格式化时间戳示例
Feb 10 Javascript
使用bootstrap实现多窗口和拖动效果
Sep 22 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
Aug 28 Javascript
vue 中directive功能的简单实现
Jan 05 Javascript
微信小程序实现九宫格抽奖
Apr 15 Javascript
elementUI select组件value值注意事项详解
May 29 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 采集获取指定网址的内容
2010/01/05 PHP
PHP开发的一些注意点总结
2010/10/12 PHP
PHP explode()函数用法、切分字符串
2012/10/03 PHP
PHP 实现代码复用的一个方法 traits新特性
2015/02/22 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
a标签click和href执行顺序探讨
2014/06/23 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
2015/02/13 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
纯javascript移动优先的幻灯片效果
2015/11/02 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
2019/09/21 jQuery
JS实现表单中点击小眼睛显示隐藏密码框中的密码
2020/04/13 Javascript
python实现图像识别功能
2018/01/29 Python
python修改txt文件中的某一项方法
2018/12/29 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
python语言是免费还是收费的?
2020/06/15 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
2020/11/30 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
模具设计与制造专业应届生求职信
2013/10/18 职场文书
事业单位接收函
2014/01/10 职场文书
企业承诺书怎么写
2014/05/24 职场文书
党支部四风整改方案
2014/10/25 职场文书
捐助感谢信
2015/01/22 职场文书
企业团队精神心得体会
2016/01/19 职场文书
导游词之天津盘山
2019/11/01 职场文书
详解redis在微服务领域的贡献
2021/10/16 Redis