JSON

来源:互联网 发布:淘宝线下推广计划 编辑:程序博客网 时间:2024/06/06 18:47

      JSON是一种轻量级的数据格式,不是一种编程语言。虽然JSON与JavaScript具有相同得语法形式,但是JSON并不属于JavaScript。很多编程语言都可使用JSON,都有JSON的解析器和序列化器。
这里写图片描述

一:语法

  1. 简单值
    表示数值:8
    表示字符串:“Hello Word”
    注:字符串必须是双引号,区别JavaScript
  2. 对象
{    "Name":"shuang",    "age":18    "school":{        "Name":"langyuan",        "location":"beijing"    }}

      注:
       - 可看出对象中嵌套了一个对象,且具有相同的属性名,因为两个Name分别在不同的对象中,所以可以相同
       - 数字不需要“”
       - 没有变量声明
       - 末尾没有分号
       - 属性名必须加“”双引号
3. 数组

["shuang"18"langyuan"]

对象和数组结合

{    "title":"JavaScript",    "authors":["Peter","Jon"],    "year":2008}

二:解析与序列化

序列化

:将JavaScript对象序列化为JSON字符串,用JSON.stringify()函数实现
用法:
      - 1个参数
      - 2个参数,实现过滤结果,替换(过滤)函数replacer实现
      - 3个参数,字符串缩进(第三个是数字,不得大于10,大于10默认是10;如果不是数字,则这个字符串将在JSON字符串中用作字符)

var book={    title:"JavaScript",    authors:["Peter","Jon"],    year:2008}

序列化:

var jsonBook=JSON.stringify(book,["title","year"],"----");

var jsonBook=JSON.stringify(book,function(key,value){    switch(key){        case "title":            return value        case "authors":            return undefined        default:            return value    }},"----");

(使用undefined实现过滤)
保存在jsonBook中的字符串为:

var book={----"title":"JavaScript",----"year":2008}

有时JSON.stringify()还是不能满足某些对象的序列化,可通过toJSON()
方法,返回其自身的JSON数据格式。可为任何对象添加toJSON()方法,返回任何序列化的值。

var book={    title:"JavaScript",    authors:["Peter","Jon"],    year:2008,    toJSON:function(){        return this.title;    }}
var jsonBook=JSON.stringify(book);

以上返回book对象的title属性值
序列化对象的次序:

  1. 若存在toJSON(),则调用该方法取得有效值,否则按顺序执行序列化
  2. 若提供第二个参数,应用函数过滤器,传入函数过滤器的值是第1步返回的值
  3. 对第2步返回的每个值进行相应的序列化
  4. 若提供第3个参数,对返回值进行格式化

解析

:把JSON字符串解析为原生JavaScript值,用JSON.parse()函数实现
将日期字符串转换为Date对象时,经常用到还原函数
用法:
      可接收2个参数,第二个参数称为还原函数reviver,此函数也接收两个参数,键key和值value将日期字符串转换为Date对象时,经常用到还原函数

var book={    title:"JavaScript",    authors:["Peter","Jon"],    year:2008,    releaseDate:new Date(1995,8,8)}

解析

var jsonBook=JSON.stringify(book);var bookCopy=JSON.parse(jsonBook,function(key,value){        if(key=="releaseDate"){            return new Date(value);        }else{            return value;        }    });

可以使用以下代码查看releaseDate的值

alert(bookCopy.releaseDate.getFullYear());

      以上代码注释:
先为book对象添加releaseDate属相,该属性保存着Date对象,这个对象经序列化后变为JSON字符串,后有被解析还原为Date对象。还原函数遇到“releaseDate”键时,会创建一个新的Date对象保存在bookCopy.releaseDate属相中,正因为是保存的对象,所以能调用getFullYear()方法

【拓】

      文章开头提到了一个词,轻量级的数据结构,那么什么是轻量级那,我理解的就是结构简单或使用简单,但功能强大。咱是还没找到准确答案,若你有更好的解析,请在下方给我留言哟