夜听城嚣 夜听城嚣
首页
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 前端基建与架构
  • 专题分享

    • Git入门与开发
    • 前端面试题汇总
    • HTML和CSS知识点
  • 项目实践
  • 抓包工具
  • 知识管理
  • 工程部署
  • 团队规范
bug知多少
  • 少年歌行
  • 青年随笔
  • 文海泛舟
  • 此事躬行

    • 项目各工种是如何协作的
    • TBA课程学习
收藏

dwfrost

前端界的小学生
首页
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 前端基建与架构
  • 专题分享

    • Git入门与开发
    • 前端面试题汇总
    • HTML和CSS知识点
  • 项目实践
  • 抓包工具
  • 知识管理
  • 工程部署
  • 团队规范
bug知多少
  • 少年歌行
  • 青年随笔
  • 文海泛舟
  • 此事躬行

    • 项目各工种是如何协作的
    • TBA课程学习
收藏
  • 第1章 什么是JavaScript
  • 第2章 HTML中的JavaScript
  • 第3章 语言基础
  • 第4章 变量、作用域与内存
  • 第5章 基本引用类型
  • 第6章 集合引用类型
  • 第7章 迭代器与生成器
  • 第8章 对象、类与面向对象编程
  • 第9章 代理与反射
  • 第10章 函数
  • 第11章 异步编程
  • 第12章 BOM
  • 第14章 DOM
  • 第15章 DOM扩展
  • 第16章 DOM2和DOM3
  • 第17章 事件
  • 第18章 动画与Canvas图形
  • 第19章 表单脚本
  • 第20章 JavaScript API
  • 第21章 错误处理与调试
  • 第23章 JSON
    • 第24章 网络请求与远程资源
    • 第25章 客户端存储
    • 第26章 模块
    • 第27章 工作者进程
    • 第28章 最佳实践
    • 《JavaScript高级程序设计》
    frost
    2022-04-05

    第23章 JSON

    JSON 是 XML 的替代方案,也是一种通用的数据格式。

    # 语法

    JSON 一共有 3 种类型的值。

    • 简单值:字符串、数值、布尔值和 null,没有 undefined 值。
    • 对象:属性名使用双引号包裹。
    • 数组。

    JSON 是一种数据格式,用来表示结构化的数据,没有变量、函数和对象实例的概念。

    JSON 字符串必须要双引号包裹,不需要分号结尾。

    {
      "name": "Nico",
      "age": 30,
      "school": {
        "name": "Harvard",
        "academy": [
          {
            "name": "h1"
          },
          {
            "name": "h2"
          }
        ]
      }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    # 解析与序列化

    JSON 对象有 2 个方法:

    • stringify(obj,filter,retract)。将 js 对象序列化为 json 字符串。

      • obj,要序列化的 js 对象
      • filter,过滤器,可以是数组或函数
      • retract,控制缩进和空格
      const book = {
        title: 'book name',
        authors: ['jack', 'rose'],
        edition: 4,
      }
      
      const bookText1 = JSON.stringify(book, ['title'])
      const bookText2 = JSON.stringify(book, (key, value) => {
        switch (key) {
          case 'title':
            return 'the name is ' + value
          default:
            return value
        }
      })
      const bookText3 = JSON.stringify(book, null, 4)
      console.log(bookText1) // {"title":"book name"}
      console.log(bookText2) // {"title":"the name is book name","authors":["jack","rose"],"edition":4}
      console.log(bookText3)
      // {
      //     "title": "book name",
      //     "authors": [
      //         "jack",
      //         "rose"
      //     ],
      //     "edition": 4
      // }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27

      此外,如果对象拥有 toJSON 方法,则会调用该方法获取实际的值。

      const book = {
        title: 'book name',
        authors: ['jack', 'rose'],
        edition: 4,
        toJSON: function() {
          return this.title
        },
      }
      const bookText1 = JSON.stringify(book) // "book name"
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
    • parse()。将 json 字符串解析为 js 对象。

      JSON.parse()方法也有一个额外参数,可以拦截返回结果并修饰。

      const book = {
        title: 'book name',
        authors: ['jack', 'rose'],
        edition: 4,
      }
      
      const bookText = JSON.stringify(book)
      const bookCopy = JSON.parse(bookText, (key, value) => (key === 'title' ? 'name is ' + value : value))
      console.log(bookCopy) // { title: 'name is book name', authors: [ 'jack', 'rose' ], edition: 4 }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9

      另外,这里可以引申出一个简陋版的深度拷贝:

      const book = {
        title: 'book name',
        authors: ['jack', 'rose'],
        edition: 4,
      }
      
      const bookCopy = JSON.parse(JSON.stringify(book))
      console.log(bookCopy)
      
      1
      2
      3
      4
      5
      6
      7
      8
    #读书笔记
    上次更新: 2022/04/26, 08:07:21
    第21章 错误处理与调试
    第24章 网络请求与远程资源

    ← 第21章 错误处理与调试 第24章 网络请求与远程资源→

    最近更新
    01
    提交代码时修改commit消息
    04-09
    02
    如何快速定位bug
    02-20
    03
    云端web项目开发踩坑
    08-25
    更多文章>
    Theme by Vdoing | Copyright © 2021-2025 dwfrost | 粤ICP备2021118995号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×