JSON 序列化将对象转换为 JSON 字符串,反序列化将其转换回来。每种语言处理方式不同。
JavaScript / TypeScript
// 序列化
const json = JSON.stringify({ name: "Alice", age: 30 }, null, 2);
// 反序列化
const obj = JSON.parse(json);
// 使用 replacer 自定义序列化
const json2 = JSON.stringify(obj, (key, value) => {
if (value instanceof Date) return value.toISOString();
return value;
});
// 使用 reviver 反序列化
const obj2 = JSON.parse(json2, (key, value) => {
if (key.endsWith('Date')) return new Date(value);
return value;
});
限制: 不支持 undefined、函数、Date、Map、Set 或循环引用。
Python
import json
from datetime import datetime
# 序列化
data = {"name": "Alice", "age": 30}
json_str = json.dumps(data, indent=2)
# 反序列化
obj = json.loads(json_str)
# 自定义日期编码器
class DateEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
return super().default(obj)
json_str = json.dumps({"created": datetime.now()}, cls=DateEncoder)
Go
import "encoding/json"type User struct {
Name string json:"name"
Age int json:"age"
}
// 序列化
user := User{Name: "Alice", Age: 30}
bytes, _ := json.Marshal(user)
// 反序列化
var result User
json.Unmarshal(bytes, &result)
Java
import com.fasterxml.jackson.databind.ObjectMapper;ObjectMapper mapper = new ObjectMapper();
// 序列化
String json = mapper.writeValueAsString(user);
// 反序列化
User user = mapper.readValue(json, User.class);
常见陷阱
JSON.stringify 对大数会丢失精度使用我们的 JSON 格式化器 格式化序列化输出以提高可读性。