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 处理异常数据即可。