学习Javascript之JSON篇

本文介绍了JSON的基本概念、语法、对象和数组的使用,以及解析与序列化过程。重点讲解了如何通过`JSON.stringify()`和`JSON.parse()`操作数据,以及序列化选项和解析选项的应用实例。
摘要由CSDN通过智能技术生成

JSON是一种轻量级的数据格式,可以方便地表示复杂数据结构。

JSON是JavaScript的严格子集,利用JavaScript中的几种模式来表示结构的数据。
理解JSON的关键点是把它当作一种数据格式,而不是编程语言。JSON格式更简洁,JavaScript支持也更好,更重要的是,所有浏览器已经原生支持全局JSON对象

1、JSON语法支持三种类型的值

1、简单值:字符串、数值、布尔值和null,特殊值undefined不可以
2、对象:第一种复杂数据类型,对象表示有序键值对。每个值可以是简单值也可以是复杂类型
3、数组:第二种复杂数据类型,数组表示可以通过数值索引访问的值的有序列表,数组的值可以是任意类型,包括简单值、对象、甚至其他数组

注意点:JSON没有变量、函数或对象实列的概念

JavaScript字符串与JSON字符串的主要区别是,JSON字符串必须使用双引号(单引号会导致语法错误)

2、JSON中 的对象必须使用双引号把属性名包围起来

例如:
JavaScript创建对象

let obj = {
            name:'zs',
            age:10
        }

JSON创建对象

 let obj = {
            "name":"zs",
            "age":10
        }

3、解析与序列化

JSON可以直接被解析成可用的JavaScript对象,与解析为DOM文档的xml相比,这个优势非常明显,这就是为什么JSON大受JavaScript开发者的喜爱。

JSON对象有两个方法,stringify()和parse()。在简单的情况下,这两个方法分别可以将JavaScript序列化为JSON字符串,以及将JSON解析为原生JavaScript值
例如:

let book = {
        title:'a flying pig',
        authors:'zs',
        year:2021,
        publish:'jiangsu dega publisher'
    }
    let jsonText = JSON.stringify(book)
    console.log(jsonText,'jsonText');

用JSON.stringify()把一个JavaScript对象序列化为一个JSON字符串,保存在变量jsonText 中。默认情况下,JSON.stringify()会输出不包含空格或缩进的JSON字符串,因此jsonText 的值是这样的
在这里插入图片描述
JSON字符串可以直接传给JSON.parse(),然后得到相应的JavaScript值
例如:

let book = {
        title:'a flying pig',
        authors:'zs',
        year:2021,
        publish:'jiangsu dega publisher'
    }
    let jsonText = JSON.stringify(book)
    let bookcopy = JSON.parse(jsonText)
    console.log(bookcopy,'bookcopy');

注意book 和bookcopy是两个完全不同的对象,没有任何关系,但是它们拥有相同的属性和值,如果给JSON.parse()传入的JSON字符串无效,则会导致抛出错误。
在这里插入图片描述

4、系列化选项

JSON.stringify()方法除了要序列化的对象,还可以接收两个参数,这两个参数可以用于指定其他序列化JavaScript对象的方式。第一个参数是过滤器,可以是数组或函数。第二个参数是用于缩进结果JSON字符串的选项。
1.过滤结果
如果第二个参数是一个数组,JSON.stringify()返回的结果只包含该数组中列出的对象属性

let book = {
        title:'a flying pig',
        authors:'zs',
        year:2021,
        publish:'jiangsu dega publisher'
    }
    let jsonText = JSON.stringify(book,["title","year"])
    console.log(jsonText,'jsonText');

JSON字符串只会包含这两个属性
在这里插入图片描述
如果第二个参数是一个函数,提供的函数接收两个参数,属性名(key)和属性值(value)。可以根据这个key决定要对相应属性执行什么操作。这个key始终是字符串,只是在值不属于某个键值对时会是空字符串。
为了改变对象的序列化,返回的值就是相应key应该包含的结果,注意,返回undefined会导致属性被忽略。

let book = {
        title: 'a flying pig',
        authors: ['zs', 'ls'],
        year: 2021,
        publish: 'jiangsu dega publisher',
      }
      let jsonText = JSON.stringify(book, (key, value) => {
        switch (key) {
          case 'authors':
            return value.join(',')
          case 'year':
            return 5000
          case 'publish':
            return undefined

          default:
            return value
        }
      })
      console.log(jsonText, 'jsonText')

在这里插入图片描述

5、解析选项

JSON.parse()方法也可以接收一个额外的参数,这个函数会针对每个键值对都调用一次。为区别于传给JSON.stringify()的起过滤作用的替代函数,这个函数被称为还原函数。实际上它们的格式完全一样,即还原函数也接收两个参数,属性名(key)和属性值(value),也需要返回值。

如果还原函数返回undefined,则结果中就会删除相应的键。如果返回了其他任何值,则该值就会成为相应键的值插入到结果中。还原函数经常用在把日期字符串转换为Date对象。

例如:

let book = {
        title: 'a flying pig',
        authors: ['zs', 'ls'],
        year: 2021,
        publish: 'jiangsu dega publisher',
        releaseDate:new Date(2021,11,26)
      }
     let jsonText = JSON.stringify(book)
      let bookcopy = JSON.parse(jsonText,(key,value)=>key=="releaseDate"?new Date(value):value

      )
     alert(bookcopy.releaseDate.getFullYear())

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值