JSON完全指南:从入门到最佳实践

JSON(JavaScript Object Notation)是目前互联网上最流行的数据交换格式之一。它轻量、易读、跨语言支持,几乎每一位开发者每天都在与之打交道。本文带你从语法基础到高级应用,全面掌握 JSON 的核心知识和最佳实践。

一、JSON 是什么

JSON 是一种轻量级的数据交换格式,由 Douglas Crockford 在 2001 年左右正式推广。它基于 JavaScript 语法的子集,但完全独立于编程语言。几乎所有主流语言都内置或提供了 JSON 解析库。

JSON 的设计目标是易于人阅读和编写,同时易于机器解析和生成。这两个特性使它迅速取代 XML 成为 Web API 的首选数据格式。

二、JSON 语法规则

JSON 的语法非常简洁,只有几个基本规则需要记住:

2.1 支持的数据类型

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

2.2 简单示例

{
  "name": "张三",
  "age": 28,
  "isStudent": false,
  "hobbies": ["编程", "阅读", "跑步"],
  "address": {
    "city": "成都",
    "district": "高新区",
    "street": null
  }
}

三、JSON 在 JavaScript 中的使用

JavaScript 提供了两个核心方法来处理 JSON:

3.1 JSON.parse() — 解析 JSON 字符串

将 JSON 字符串转换为 JavaScript 对象:

const jsonStr = '{"name":"张三","age":28}';
const obj = JSON.parse(jsonStr);
console.log(obj.name); // 张三

JSON.parse() 还支持第二个参数 reviver 函数,可以在解析过程中转换值:

const data = JSON.parse(jsonStr, (key, value) => {
  if (key === 'age') return value + 1;
  return value;
});

3.2 JSON.stringify() — 序列化为字符串

将 JavaScript 对象转换为 JSON 字符串:

const obj = { name: "张三", age: 28 };
const str = JSON.stringify(obj);
// '{"name":"张三","age":28}'

第二个参数 replacer 可以过滤或转换值,第三个参数 space 控制缩进美化输出:

const pretty = JSON.stringify(obj, null, 2);
console.log(pretty);

四、常见使用场景

五、最佳实践

5.1 命名规范

业界主流使用驼峰式(camelCase)或下划线式(snake_case)。与 JavaScript 交互时推荐 camelCase,与 Python/Ruby 交互时 snake_case 更自然。关键是保持一致,不要混用。

5.2 处理循环引用

如果对象存在循环引用,JSON.stringify() 会抛出 TypeError。可以使用 WeakMap 实现安全序列化:

function safeStringify(obj) {
  const seen = new WeakSet();
  return JSON.stringify(obj, (key, value) => {
    if (typeof value === 'object' && value !== null) {
      if (seen.has(value)) return;
      seen.add(value);
    }
    return value;
  });
}

5.3 大数字精度问题

JSON 数字在 JavaScript 中会被解析为 64 位浮点数,超过 2^53 的整数会丢失精度。对于 ID 等大数字,建议以字符串形式传输。

5.4 安全注意事项

六、JSON 的替代方案

虽然 JSON 是目前的主流,但在一些特定场景下,其他格式可能更适合:

七、实用工具推荐

在日常开发中,以下工具能大大提升处理 JSON 的效率:

总结

JSON 是现代 Web 开发中不可或缺的基础技能。理解它的语法规则、掌握 JavaScript 中的解析与序列化方法、了解常见坑点和最佳实践,能让你在日常开发中更加游刃有余。对于大多数场景,JSON 仍然是数据交换格式的最佳选择。