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 17 Javascript
学习ExtJS Column布局
Oct 08 Javascript
Javascript将string类型转换int类型
Dec 09 Javascript
查找Oracle高消耗语句的方法
Mar 22 Javascript
jquery实现聚光灯效果的方法
Feb 06 Javascript
JavaScript中匿名函数用法实例
Mar 23 Javascript
深入理解angularjs过滤器
May 25 Javascript
Mac中安装nvm的教程分享
Dec 11 Javascript
JS判断字符串是否为整数的方法--简单的正则判断
Jul 23 Javascript
VUE 配置vue-devtools调试工具及安装方法
Sep 30 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
Sep 03 Javascript
解决antd Form 表单校验方法无响应的问题
Oct 27 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/04/25 PHP
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
php银联网页支付实现方法
2015/03/04 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
2015/04/06 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
2016/02/22 Javascript
原生js的数组除重复简单实例
2016/05/24 Javascript
JS重载实现方法分析
2016/12/16 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
2018/07/12 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
vue组件创建的三种方式小结
2020/02/03 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
浅谈python迭代器
2017/11/08 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
.net笔试题
2014/03/03 面试题
财务部总监岗位职责
2014/03/12 职场文书
环保倡议书300字
2014/05/15 职场文书
2015新学期家长寄语
2015/02/26 职场文书
幼儿园门卫安全责任书
2015/05/08 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript