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 相关文章推荐
取得一定长度的内容,处理中文
Dec 20 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
Dec 25 Javascript
js修改地址栏URL参数解决url参数问题
Dec 15 Javascript
javascript通过class来获取元素实现代码
Feb 20 Javascript
js实现格式化金额,字符,时间的方法
Feb 26 Javascript
AngularJS中处理多个promise的方式
Feb 02 Javascript
基于javascript实现九九乘法表
Mar 27 Javascript
JavaScript登录验证码的实现
Oct 27 Javascript
原生js实现鼠标跟随效果
Feb 28 Javascript
详解打造 Vue.js 可复用组件
Mar 24 Javascript
详解Vue 非父子组件通信方法(非Vuex)
May 24 Javascript
Vue 引入AMap高德地图的实现代码
Apr 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页面间参数传递的四种方法详解
2013/06/09 PHP
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
PHP实现的同步推荐操作API接口案例分析
2016/11/30 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
给moz-firefox下添加IE方法和属性
2007/04/10 Javascript
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
javascript中Date对象的getDay方法使用指南
2014/12/22 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
jquery实现鼠标悬浮停止轮播特效
2020/08/20 Javascript
json格式数据的添加,删除及排序方法
2016/01/21 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
Javascript获取某个月的天数
2018/05/30 Javascript
详解从NodeJS搭建中间层再谈前后端分离
2018/11/13 NodeJs
[01:29:17]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
python框架django基础指南
2016/09/08 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
python 实现语音聊天机器人的示例代码
2018/12/02 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
2019/01/29 Python
python 字典有序并写入json文件过程解析
2019/09/30 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
Python 实现集合Set的示例
2020/12/21 Python
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
法国房车租赁网站:Yescapa
2019/08/26 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
学院领导推荐信
2013/10/30 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
新颖的化妆品活动方案
2014/08/21 职场文书
后进生评语大全
2015/01/04 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
五星级酒店宣传口号
2015/12/25 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
62句有关感恩节文案(推荐收藏)
2019/11/28 职场文书
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server
Golang 对es的操作实例
2022/04/20 Golang