JavaScript JSON

什么是 JSON

JSON(JavaScript Object Notation,JavaScript 对象表示法)是一种轻量级的数据交换格式。它源于 JavaScript 的对象字面量写法,但已成为与语言无关的标准:前后端通信、配置文件、API 返回值几乎都用 JSON。传输时数据是"字符串",JSON 负责在字符串与对象之间转换。

JSON 语法规则

规则很少却很严格:

  • 数据由键值对构成,键必须用双引号包裹。
  • 值只能是:字符串(双引号)、数字、布尔值 true/false、null、数组、JSON 对象。
  • 不能写注释,不能包含函数或 undefined,末尾不能有逗号。

一个合法的 JSON 示例:

{
  "name": "小明",
  "age": 20,
  "married": false,
  "hobbies": ["篮球", "编程"]
}

JSON.parse():字符串转成对象

把 JSON 字符串解析为 JavaScript 对象:

var str = '{"name":"小明","age":20}';
var obj = JSON.parse(str);
console.log(obj.name);     // 输出:小明
console.log(obj.age + 1);  // 输出:21(解析后是真正的数字)

字符串格式不合法时 parse 会抛异常,建议用 try...catch 包裹:

try {
    JSON.parse("{name:1}"); // 键没加双引号,属于非法 JSON
} catch (err) {
    console.log("解析失败:" + err.message);
}
// 输出:解析失败:...

JSON.stringify():对象转成字符串

把对象(或数组)序列化为 JSON 字符串,用于发送给服务器或写入本地存储:

var user = { name: "小红", age: 18, like: ["读书"] };
var json = JSON.stringify(user);
console.log(json);
// 输出:{"name":"小红","age":18,"like":["读书"]}

序列化时,函数、undefined、symbol 等特殊值会被忽略或变成 null。

应用示例:与 localStorage 配合

localStorage 只能存字符串,存对象前先 stringify,取回时再 parse:

var cart = { id: 1, num: 2 };
localStorage.setItem("cart", JSON.stringify(cart)); // 存入
var back = JSON.parse(localStorage.getItem("cart")); // 取回
console.log(back.id); // 输出:1

小结

JSON 是通用的数据交换格式:语法上要求"键加双引号、值类型有限";JavaScript 中发送前用 JSON.stringify() 编码,收到后用 JSON.parse() 解码,再配合 try...catch 处理异常数据即可。

笔记加载中…