JSON 语法

JSON 语法详解

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,其语法简单且严格。以下是对 JSON 语法的详细中文讲解,涵盖所有规则、数据类型和示例,力求清晰易懂。


1. JSON 的基本结构

JSON 数据由两种主要结构组成:

  1. 对象(Object)
  • 用花括号 {} 包裹。
  • 包含一组键值对,键和值之间用冒号 : 分隔,键值对之间用逗号 , 分隔。
  • 键必须是字符串(用双引号 "" 包裹),值可以是多种数据类型。
  • 示例:
    json { "name": "张三", "age": 25 }
  1. 数组(Array)
  • 用方括号 [] 包裹。
  • 包含一组有序的值,值之间用逗号 , 分隔。
  • 值可以是任意 JSON 支持的数据类型。
  • 示例:
    json ["苹果", "香蕉", 42]

2. JSON 支持的数据类型

JSON 支持以下六种数据类型:

  1. 字符串(String)
  • 用双引号 "" 包裹,支持 Unicode 字符和转义字符(如 \n\t\")。
  • 示例:
    json "Hello, 世界!"
  • 注意:单引号 ' 不合法。
  1. 数字(Number)
  • 支持整数、浮点数和科学计数法。
  • 不区分整数和浮点数,直接写数字即可。
  • 示例:
    json 42 -3.14 1.23e4
  1. 布尔值(Boolean)
  • 仅支持 truefalse
  • 示例:
    json true
  1. 空值(Null)
  • 表示空值,用 null 表示。
  • 示例:
    json null
  1. 对象(Object)
  • 嵌套的对象,键值对形式。
  • 示例:
    json { "address": { "city": "北京", "zip": "100000" } }
  1. 数组(Array)
  • 有序的值列表,支持嵌套。
  • 示例:
    json [1, "test", {"id": 1}, [2, 3]]

3. JSON 语法规则

JSON 的语法非常严格,以下是必须遵守的规则:

  1. 键必须是字符串
  • 对象的键必须用双引号包裹,例如 "key",不能用单引号或无引号。
  • 错误示例:
    json { key: "value" } // 错误:键缺少双引号 { 'key': "value" } // 错误:单引号不合法
  1. 值类型限制
  • 值必须是上述六种类型之一,不支持函数、日期对象、undefined 等 JavaScript 特有类型。
  • 错误示例:
    json { "date": new Date() } // 错误:JSON 不支持 Date 对象
  1. 分隔符
  • 键值对之间用冒号 : 分隔。
  • 多个键值对或数组元素之间用逗号 , 分隔。
  • 最后一个键值对或数组元素后不能加逗号(否则会导致语法错误)。
  • 错误示例:
    json { "name": "李四", "age": 30, // 错误:最后一个键值对后多余逗号 }
  1. 空白字符
  • JSON 支持空格、制表符(\t)、换行符(\n)等空白字符,用于格式化,但不影响数据内容。
  • 示例:
    json { "name": "王五", "age": 28 }
  1. 转义字符
  • 字符串中支持以下转义字符:
    • \":双引号
    • \\:反斜杠
    • \n:换行
    • \t:制表符
    • \uXXXX:Unicode 字符(XXXX 是四位十六进制数)
  • 示例:
    json { "message": "Hello\nWorld", "unicode": "\u4E16\u754C" // 表示“世界” }
  1. 不支持注释
  • JSON 不支持任何形式的注释(例如 ///* */)。
  • 错误示例:
    json { "name": "张三" // 这是一个名字 // 错误:JSON 不支持注释 }

4. 完整 JSON 示例

以下是一个包含多种数据类型的 JSON 示例,展示了嵌套结构:

{
  "user": {
    "name": "赵六",
    "age": 22,
    "isStudent": true,
    "email": null,
    "hobbies": ["读书", "旅行", "编程"],
    "address": {
      "city": "上海",
      "zip": "200000",
      "coordinates": [121.4737, 31.2304]
    },
    "scores": [
      {"subject": "数学", "score": 95},
      {"subject": "英语", "score": 88}
    ]
  }
}

说明

  • 包含对象(useraddress)、数组(hobbiescoordinatesscores)、字符串、数字、布尔值和空值。
  • 结构清晰,支持多层嵌套。

5. 在 Node.js 中验证 JSON 语法

在 Node.js 中,可以使用 JSON.parse 检查 JSON 字符串是否符合语法规则:

const jsonString = `{
  "name": "张三",
  "age": 25
}`;

try {
  const obj = JSON.parse(jsonString);
  console.log("JSON 语法正确:", obj);
} catch (error) {
  console.error("JSON 语法错误:", error.message);
}
  • 如果 JSON 字符串有语法错误(如多余逗号或单引号),JSON.parse 会抛出 SyntaxError
  • 建议始终使用 try-catch 捕获解析错误。

6. 常见 JSON 语法错误

  1. 多余的逗号
   {"name": "李四",}  // 错误:对象末尾多余逗号
   ["a", "b",]        // 错误:数组末尾多余逗号
  1. 单引号
   {'name': '李四'}  // 错误:键和值必须用双引号
  1. 不支持的数据类型
   {"func": function(){}}  // 错误:JSON 不支持函数
   {"date": 2025-07-28}   // 错误:日期格式不合法
  1. 缺失双引号
   {name: "张三"}  // 错误:键必须用双引号

7. JSON 格式化工具

  • 在线工具:JSONLint(jsonlint.com)、JSON Formatter(jsonformatter.org)可验证和格式化 JSON。
  • Node.js 格式化:使用 JSON.stringify(obj, null, 2) 格式化输出,便于阅读:
  const obj = { name: "王五", age: 28 };
  console.log(JSON.stringify(obj, null, 2));
  // 输出:
  // {
  //   "name": "王五",
  //   "age": 28
  // }

8. JSON 与 MongoDB

在 Node.js 连接 MongoDB 时(如前文提到的代码),JSON 是数据交互的核心格式。MongoDB 文档通常以 JSON 形式表示,Node.js 的 MongoDB 驱动直接操作 JSON 数据。例如:

const { MongoClient } = require('mongodb');
const uri = 'mongodb://localhost:27017/myDatabase';
const client = new MongoClient(uri);

async function run() {
  try {
    await client.connect();
    const db = client.db('myDatabase');
    const collection = db.collection('users');
    // 插入 JSON 数据
    await collection.insertOne({
      name: "李四",
      age: 30,
      hobbies: ["读书", "旅行"]
    });
  } finally {
    await client.close();
  }
}
run();

9. 总结

JSON 语法简单但严格,核心规则包括:

  • 对象用 {},数组用 []
  • 支持字符串、数字、布尔值、null、对象和数组六种类型。
  • 键必须是双引号包裹的字符串,值需符合类型规则。
  • 逗号分隔键值对或数组元素,最后一项无逗号。
  • 不支持注释、函数等非标准类型。

如果你需要更复杂的 JSON 示例、解析技巧,或与 Node.js、MongoDB 的具体集成帮助,请告诉我!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注