数据结构 - 深入了解 JSON

522 阅读3分钟

这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战

学习贵在坚持, 笔记是灵魂, 温故而知新, 时不时翻一翻, 回顾一下知识点, 加深记忆, 事半功倍!

前文我们学习了 Node.js 实战: 文件系统模块 结合 HTTP模块-搭建一个简单的 本地文件服务器,

通过读取本地文件, 模拟了数据接口, 调取本地的 .json 文件并返回, 就是前后端通信用到的最多的数据结构了吧

那咱们今天就来学习一下 这个了不起的数据结构: JSON

深入了解 JSON

今天来聊一聊 可以说是 世界上最受欢迎的数据交换格式 JSON 域名: json.org

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括 C, C++, C#, Java, JavaScript, Perl, Python 等)。 这些特性使 JSON 成为理想的数据交换语言。

你知道 JSON 的大名吗?

JSON 是我们常见的, 也是流行的序列化格式. 它的全称为: JavaScript Object Notation

如题就是我们经常打交道的 JSON, 和我们熟悉的 JavaScript 即 JS, 会不会有联想到一起呢?

JSON 的书写格式

JSON 的书写格式看起来和我们编写 JavaScript 的对象和数组的方式差不多, 但是 JSON有一些限制:

  1. 所有属性名都须要用双引号 "" 括起来,
  2. 并且只允许使用简单的数据表达式, 比如: 数字/字符串/对象/数组, 而不函数调用/涉及计算的任何内容..
  3. JSON 中还不允许有注释...

比如项目中接口一般返回的格式, 包含的 相应字段:

这里是 掘金抽奖页面 展示抽到奖品列表接口 返回的数据格式:

包含用到的数据: 请求接口返回的状态 "err_msg"/ 用户名 "user_name"/ 统计数据 "count"

{
  "data": {
    "count": 544,
    "lotteries": [
      {
        "lottery_image": "https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ab31c183950541d4a0731c0b8765b173~tplv-k3u1fbpfcp-no-mark:0:0:0:0.image",
        "lottery_name": "掘金马克杯",
        "user_avatar": "https://sf3-ttcdn-tos.pstatp.com/img/user-avatar/0c1e7da2d3aa42f640a3e5574f584eae~300x300.image",
        "user_name": "最爱你的人"
      }
    ],
    "err_msg": "success",
    "err_no": "0"
  }
}

JSON 数据格式转换

JavaScript 中为我们提供了两个转换数据的方法函数: JSON.stringify()JSON.parse()

JSON.stringify(value) 对获取的 JavaScript 值 进行编码成为 JSON编码 的字符串

JSON.parse(上面格式化的字符串) 对上面编码的字符串进行 转换 解码为它编码的值

示例:

let stringifyString = JSON.stringify({ err_msg: 'success', data: ['lists'] })

console.log(stringifyString)
// --> {"err_msg":"success","data":["lists"]}

let parseString = JSON.parse(stringifyString)

console.log(parseString.data) // --> ["lists"]

深入其解析原理

官网:json.org

这里贴下其官网(作者买下的域名)的一些图, 靠大家自己领悟吧..

1. 对象 Object 的解析

image

2. 数组 Array 的解析

image

3. 值 value 的解析

image

4. 字符 String 的解析

image

4. 数字 number 的解析

image

4. 空格 whitespace 的解析

image

更多阅读

更多更文阅读请查收:

【Node.js】day18 文件系统服务器-模拟接口

【Node.js】day16-文件系统模块【Node.js】day17-HTTP 模块

【Node.js】效率工具-nvm & nrm 等

【Node.js】包管理工具 npm & yarn 的使用

【Node.js】安装&文档

【Github】多人协作(二)【Github】基本使用(一)

【Git】代码版本控制-git 初识&基本操作(一)【Git】进阶(二)

【Node.js】搭建自动化开发环境-基本介绍【工具准备】【开工】【详细步骤(四)】【模块处理工具(五)】【模块化编程的理解】

跟上节奏, 一步一步! 下文更新预告:

接下来会继续详细学习 Node.js 的相关方法, 冲鸭!! xdm

学习用到的效率工具, 提高开发效率, 为我们的开发提效赋能! 加油!! go~~