您的位置:首页 > Web前端 > JavaScript

【JS】【笔记】JavaScript入门经典(第5版)第8章 JSON

2016-01-31 00:10 399 查看
本文为个人读书笔记,大部分为书中内容摘要。仅供记录和分享学习中遇到的需要留意的问题,如有相关版权问题请及时通知作者。

概述
     JavaScript Object Notation
     JSON是JS对象的一种标签。使用JSON对象可以方便地为字符串来进行存储和转换。
     对象在JSON里是以普通JS代码表示的,因此可以利用JS的自动解析功能,让JS把JSON字符串的内容解释为代码,而不需要其他的解释程序或转换器。

JSON语法
     JSON数据的表示方式是一系列成对的参数与值,参数与值由冒号分隔,每对之间以逗号分隔
     “param1”:“value1”,“param2”:“value2”;
     最终这些序列用花括号包装起来,构成表示数据的JSON对象
     var jsonObject={“param1”:“value1”,“param2”:“value2” }
     jsonObject的定义使用标准JavaScript标签的子集,就是标准的JavaScript代码。

     使用JSON标签编写的对象也具有属性和方法,能够利用句点标签进行访问:
          alert(jsonObject.param1);
     任何能够以键值对表示的数据都能够用JSON标签表示。

访问JSON数据
     还原以JSON字符串编码的数据,需要把字符串转换为JS代码,这一过程成为“去序列化”。
     eval()
          可以把JSON字符串转换为JS对象
          var myObject=eval(‘(‘+jsonObjectString+’)’);
          然后就可以在脚本里使用这个JavaScript对象
          JS的eval()函数会计算或运行作为参数传递的内容。如果参数是个表达式eval()会计算它的值。如果参数包含一个或多个JS语句,eval()执行这些语句

     使用浏览器对JSON直接支持
          较新的浏览器,会创建一个名为JSON的JS对象来管理JSON的编码和解码。这个对象有两个方法:stringify()和parse()
          JSON.parse()
               用于解释JSON字符串。接收一个字符串作为参数,解析它,创建一个对象,并且根据字符串里发现的键值对设置对象的参数

JSON的数据序列化
     序列化:把数据转换为便于通过网络进行存储和传输的形式,稍后再回复为原始的格式。
     JSON使用字符串最为序列化数据的格式。
     在直接支持JSON的浏览器里,可以使用JSON.stringify()方法创建对象的JSON编码字符串。

JSON数据类型
     键值对里的参数部分的语法规则:不能是关键字,不能以数字开头,除了下划线和美元符号不能包含其他特殊字符。
     可以是以下数据类型:数值、字符串、布尔值、数组、对象、null。(不包括Date、Error、Math、Fuction)

模拟关联数组
     JavaScript不支持关联数组。(使用文本形式索引)
     JS中object[property]和object.property是相同的语法。

使用JSON创建对象
     虽然JSON是为了描述JavaScript对象而开发的,但它是独立于编程语言和平台的,Java、PHP、C等都包含JSON库和工具。
     属性
          用JSON标签表示对象时,把对象包含在花括号里,而不是方括号里,以“参数”:“值”对的方式列出对象的属性。
          var user={
               "username":"philb1234",
               "location":"Spain"}
          之后就可以用常见的形式访问对象的属性
          JSON创建空对象:var myObject={ }
    
     方法
          利用匿名函数就可以给对象添加方法
          var user={
               "username":"philb1234",
               "setName":fuction(newName){
                    this.username=newName;
               }
          }
          然后就可以调用这个setName方法了。
          在JS环境中使用这种方式添加方法是可以的,但当JSON作为通用数据交换格式时,不可以。直接支持JSON解析的浏览器里,以这种方式声明的函数会解析错误,但eval()函数可用。如果实例化的脚本只在自己的脚本里使用,是可以的。

     数组
          属性值可以是数组。使用object.property[index]访问

     对象
          JSON对象还可以包含其他对象。通过把数组元素本身设置为JSON编码的对象,就可以利用句点标签访问。
          var booklistobject={
               “booklist”:[{"title":"A1","author":"B1"},
                                      {"title":"A2","author":B2"}]
          }
          调用:alert(bookListObject.booklist[0].author);

JSON安全性
     使用JS的eval()函数能够执行任何JS命令,这可能会导致潜在的安全问题,特别是处理来源不明的JSON数据时。更安全的办法是使用内置JSON解析器的浏览器吧JSON字符串转换为JS对象,它只识别JSON文本,而且不会执行脚本命令。内置JSON解析器的速度也比eval()快一些。ECMAScript(JavaScript)标准也明确了 它的规范。

JSON规范文档
     RFC  4627和JSON官网
如何判断使用的浏览器 是否直接支持JSON
     if(typeof Json=='object'){
          //直接支持
     }else{
          //用其他方式解决,如eval()
     }
          
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息