zoukankan      html  css  js  c++  java
  • JavaScript高级程序设计:第二十章

    第二十章

    一、语法

    JSON的语法可以表示以下三种类型的值:

    (1)简单值

    (2)对象

    JSON的对象与javascript字面量有一些不同。例如,在javascript中,前面的对象字面量可以写成下面这样:

    var  object = {

             “name” : “Nicholas” ,

             “age” : 29

    } ;

    JSON表示上述对象的方式如下:

    {

             “name” : “Nicholas” ,

             “age” : 29

    }

    不同之处:首先,没有声明变量,其次,没有末尾的分号。最后,对象的属性必须加双引号。

    (3)数组

    下面是javascript中的数组字面量:

    var  values = [25 , “hi” , true] ;

    在JSON中,可以采用同样的语法表示同一个数组:

    []25 , “hi” , true]

    同样,JSON数组也没有变量和分号。

    二、解析与序列化

    1.JSON对象

             早期的JSON解析器基本上就是使用javascript的eval()函数。由于JSON是javascript语法的子集,因此eval()函数可以解析、解释并返回javascript对象和数组。

             JSON对象有两个方法:stringgy( )和parse( )。在最简单的情况下,这两个方法分别用于把javascript对象序列化为JSON字符串和把JSON字符串解析为原生javascript值。

    2.序列化选项

    JSON.stringify( )除了要序列化的javascript对象外,还可以接收另外两个参数,这两个参数用于指定以不同的方式序列化javascript对象。第一个参数是过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项,表示是否在JSON字符串中保留缩进。

    (1)过滤结果

             如果过滤器参数是数组,那么JSON.stringify( )的结果中将只包含数组中列出的属性。来看下面的例子:

             var  book = {

                                       “title” : “Professional JavaScript” ,

                                       “authors” : [

                                                “Nicholas C.Zakas”] ,

                                       edition : 3 , year : 2011

                              } ;

             var jsonText = JSON.stringify( book , [“title” , “edition”] ) ;

             JSON.stringify( ) 的第二个参数是一个数组,其中包含两个字符串:”title”和”editon”。这两个属性与将要序列化的对象中的属性是对应的,因此在返回的结果字符串中,就只会包含这两个属性:

             { “title” : “Professional  JavaScript” , “edition” : 3 }

    (2)字符串缩进

             JSON.stringify( )方法的第三个参数用于控制结果中的缩进和空白符。如果这个参数是一个数值,那它表示的是每个级别缩进的空格数。例如,要在每个级别缩进4个空格,可以这样写代码:

             var  book = {

                                       “title” : “Professional  JavaScript” ;

                                       “authors” : [

                                                “Nicholas  C . Zakas”

                                       ] ,

                                       edition : 3 ,

                                       year : 2011

                                       } ;

             var  jsonText = JSON.stringify( nook , null , 4 ) ;

    (3)toJSON()方法

             有时候,JSON.stringify( )还是不能满足对某些对象进行自定义序列化的需求。在这些情况下,可以通过对象上调用toJSON()方法,返回其自身的JSON数据格式。

             toJSON( )可以作为函数过滤器的补充,因此理解序列化的内部顺序十分重要。假设把一个对象传入JSON.stringify( ),序列化该对象的顺序如下:

             如果存在toJSON( )方法而且能通过它取得有效的值,则调用该方法。否则,按默认顺序执行序列化。

             如果提供了第二个参数,应该用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值。

             对第(2)步返回的每个值进行相应的序列化。

             如果提供了第三个参数,执行相应的格式化。

    3.解析选项

             JSON.parse( )方法也可以接收另一个参数,该参数是一个函数,将在每个键值对上调用。为了区别JSON.stringify( )接收的替换函数,这个函数被称为还原函数。

  • 相关阅读:
    Singleton(单例模式)的一种实现 -- 基于【惰性】适用于【大对象】的一种生产实践
    001.Getting Started -- 【入门指南】
    SparkStreaming高级算子应用【combineByKey、transform,checkpoint】
    Solr基础理论【相关度计算】
    Solr基础理论【排名检索、查准率、查全率】
    Solr基础理论【倒排索引,模糊查询】
    Impala快速入门
    Redis特点分析及性能优化
    电力系统【第八章:电力系统不对称故障的分析与计算】
    SparkStreaming之checkpoint检查点
  • 原文地址:https://www.cnblogs.com/koto/p/5138220.html
Copyright © 2011-2022 走看看