JSON

48 篇文章 4 订阅

      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()方法

【拓】

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值