JSON 和 JavaScript eval使用说明

 更新时间:2010年06月13日 00:13:23   作者:  
JSON (JavaScript Object Notation) 一种轻量级的数据交换格式,比 XML 更轻巧,JSON 是JavaScript 原生格式,这意味着 JavaScript 中处理 JSON 数据不需要任何 API 和工具包。
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

相关文章

  • JSONP 跨域共享信息

    JSONP 跨域共享信息

    JSONP(JSON with Padding)是资料格式 JSON 的一种“使用模式”,可以让网页从别的网域要资料。另一个解决这个问题的新方法是跨来源资源共享
    2012-08-08
  • jQuery 遍历json数组的实现代码

    jQuery 遍历json数组的实现代码

    看到网上有很多朋友问遍历json数组的代码,脚本之家特为大家整理了一些,需要的朋友可以看下。
    2010-03-03
  • JSONP之我见

    JSONP之我见

    本文主要向大家介绍了个人对于jsonp的理解,jsonp的概念,跨域问题,以及jsonp与XMLHttpRequest的区别,由于本人也是javascript的初学者,难免会有些不当之处,还请指正,谢谢。
    2015-03-03
  • 什么是json和jsonp,jQuery json实例详详细说明

    什么是json和jsonp,jQuery json实例详详细说明

    JSON能够以非常简单的方式来描述数据结构,XML能做的它都能做,因此在跨平台方面两者完全不分伯仲.其实网上关于JSONP的讲解有很多,但却千篇一律,用自己的方式来阐释一下这个问题,看看是否有帮助
    2012-12-12
  • 详解Java中String JSONObject JSONArray List<实体类>转换

    详解Java中String JSONObject JSONArray List<实体类>转换

    这篇文章主要介绍了详解String JSONObject JSONArray List<实体类>转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • js解析与序列化json数据(三)json的解析探讨

    js解析与序列化json数据(三)json的解析探讨

    这一节我们主要讨论json的解析,感兴趣的朋友可以了解下,JSON.parse()方法也可以接收另一个参数,该参数是一个函数,将早每个键值对上调用,好了,话不多说,希望本文对你有所帮助
    2013-02-02
  • 简明json介绍

    简明json介绍

    不要认为JSON是种新的应用 ,其实JSON就是javascript支持的一种对象直接量。
    2008-09-09
  • 半个小时学json(json传递示例)

    半个小时学json(json传递示例)

    这篇文章主要介绍了半个小时学json(json传递示例),主要包括一维数组与二维数组,需要的朋友可以参考下
    2016-12-12
  • JSON相关知识汇总

    JSON相关知识汇总

    本文给大家汇总了一下关于json的相关的知识点,从基础到示例,非常全面,有需要的小伙伴可以参考下。
    2015-07-07
  • Javascript 通过json自动生成Dom的代码

    Javascript 通过json自动生成Dom的代码

    主要还是通过递归和迭代来遍历json成员生成html元素 ,比较好的是num能制定循环次数可以少写很多代码.具体应用看场景了
    2010-04-04

最新评论