JSON 序列化:JavaScript、Python 及其他语言指南

jsonserializationjavascriptpython

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 没有 Date 类型;使用 ISO 8601 字符串
  • BigInt — JavaScript JSON.stringify 对大数会丢失精度
  • 循环引用 — 会抛出 TypeError;使用 flatted 等库
  • 枚举值 — 每种语言需要显式处理
  • 使用我们的 JSON 格式化器 格式化序列化输出以提高可读性。

    相关工具