面试题:说说你对 JSON 的理解?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于 JavaScript 的一个子集,但作为一种独立于语言的文本格式,被广泛用于系统间的数据传输和存储。


1. 基本语法与结构

JSON 的语法非常简单,主要由两种结构组成:

  • 对象(Object):用花括号 {} 包围,表示一个无序的“键/值”对集合。键(key)必须是字符串(用双引号包围),值(value)可以是 JSON 支持的任意类型。
{
    "name": "Alice",
    "age": 25,
    "isStudent": false
  }
  • 数组(Array):用方括号 [] 包围,表示一个有序的值列表。数组中的值可以是任意 JSON 类型。
["apple", "banana", "orange"]

2. JSON 支持的数据类型

JSON 只支持以下几种基本类型:

类型说明示例
字符串 (String)必须用双引号 " 包围"hello", "123"
数字 (Number)整数或浮点数42, 3.14, -10
布尔值 (Boolean)truefalsetrue, false
null表示空值null
对象 (Object)键值对集合{"key": "value"}
数组 (Array)有序值列表[1, 2, 3]

重要限制

  • 不支持undefinedfunctionSymbolDate 对象、RegExp 对象。
  • 键必须是字符串,且必须用双引号。
  • 不允许尾随逗号(trailing comma)。
  • 不支持注释

3. JSON 与 JavaScript 对象的区别

虽然 JSON 看起来很像 JavaScript 对象,但它们是不同的概念:

特性JSONJavaScript 对象
本质字符串(文本格式)对象(内存中的数据结构)
用途数据传输存储程序内部数据操作
必须加双引号 "key"可加可不加(key"key"
值类型仅限 JSON 支持的类型支持所有 JS 类型(包括 undefined, function
方法不能包含方法可以包含方法
尾随逗号不允许允许(某些环境)

示例对比

// JavaScript 对象(可以包含函数和未加引号的键)
const jsObj = {
  name: 'Bob',
  sayHello: function() { console.log('Hi!'); },
  isActive: true
};

// JSON 字符串(必须是纯数据,无函数)
const jsonString = '{"name": "Bob", "isActive": true}';

4. JSON 在 JavaScript 中的使用

JavaScript 提供了内置的 JSON 对象来处理 JSON 数据:

  • JSON.stringify():将 JavaScript 对象或值转换为 JSON 字符串。
const obj = { name: "Charlie", age: 30 };
  const jsonString = JSON.stringify(obj);
  console.log(jsonString); // '{"name":"Charlie","age":30}'
  • JSON.parse():将 JSON 字符串解析为 JavaScript 对象或值。
const jsonString = '{"name":"Charlie","age":30}';
  const obj = JSON.parse(jsonString);
  console.log(obj.name); // "Charlie"

注意JSON.parse() 只能解析有效的 JSON 字符串。如果字符串包含 undefined、函数或单引号,会抛出 SyntaxError


5. JSON 的优势

  1. 轻量级:语法简洁,数据体积小,传输效率高。
  2. 易读易写:人类可读,结构清晰。
  3. 语言无关:虽然源于 JS,但几乎所有编程语言都支持 JSON 的解析和生成。
  4. 广泛支持:是 Web API(如 RESTful API)最常用的数据格式。
  5. 与 JS 天然集成:在 JavaScript 中解析和生成极其方便。

6. JSON 的应用场景

  • API 数据交换:前后端通过 HTTP 请求传输数据(如 REST API)。
  • 配置文件:如 package.json, tsconfig.json
  • 浏览器存储localStoragesessionStorage 只能存储字符串,通常用 JSON.stringify() 存储对象。
  • NoSQL 数据库:如 MongoDB 使用 BSON(Binary JSON)存储数据。

总结

JSON 是一种基于文本的、轻量级的、独立于语言的数据格式,用于在系统间交换结构化数据。它语法简单,只支持有限的数据类型,其核心是字符串形式的对象和数组。在 JavaScript 中,通过 JSON.stringify()JSON.parse() 可以方便地在对象和 JSON 字符串之间转换。理解 JSON 是现代 Web 开发的基础。

THE END
喜欢就支持一下吧
点赞13 分享