在数据处理和交换中,JSON(JavaScript Object Notation)因其轻量级和易读性成为广泛使用的格式,无论是Web开发、移动应用还是后端服务,存储和读取JSON并转换为对象都是核心技能,本文以实用角度出发,通过具体代码示例演示完整流程。
JSON的结构化特性使其适合存储配置信息、传输数据或持久化对象状态,相较于XML,JSON体积更小且与JavaScript天然兼容。
config.json
)多采用JSON。不同编程语言均内置了JSON序列化工具:
# Python示例 import json data = {"name": "Alice", "age": 30} json_str = json.dumps(data) # 序列化为字符串 with open("data.json", "w") as f: json.dump(data, f) # 直接写入文件
// JavaScript示例 const user = { id: 1, role: "admin" }; const jsonStr = JSON.stringify(user); localStorage.setItem("userData", jsonStr); // 存储到浏览器
需注意日期、二进制等类型的转换:
// Java示例(使用Gson库) Gson gson = new GsonBuilder() .registerTypeAdapter(LocalDate.class, new LocalDateAdapter()) .create(); String json = gson.toJson(employee); // 处理复杂对象
处理GB级JSON文件时避免内存溢出:
# 使用ijson库流式读取 import ijson with open("large_data.json", "r") as f: items = ijson.items(f, "item") for item in items: process(item)
// 从API获取并转换 fetch('/api/data') .then(response => response.json()) .then(data => console.log(data.user));
# 从文件加载 with open("config.json") as f: config = json.load(f) print(config["database_url"])
部分语言需手动转换类型:
# 自定义解码器处理日期 def date_decoder(obj): if "_type" in obj and obj["_type"] == "datetime": return datetime.fromisoformat(obj["value"]) return obj data = json.loads(json_str, object_hook=date_decoder)
避免无效数据导致程序崩溃:
function safeParse(jsonStr) { try { return JSON.parse(jsonStr); } catch (e) { console.error("Invalid JSON:", e); return null; } }
ajv
库)确保数据结构正确。"nm"
代替"name"
)version
字段,便于后续升级。语言 | 推荐库 | 特性 |
---|---|---|
Python | json (内置) | 支持自定义编码/解码 |
Java | Gson /Jackson | 处理注解、泛型 |
Go | encoding/json | 结构体标签映射 |
JavaScript | JSON (内置) | 原生支持,性能优秀 |
引用说明
本文部分方法参考自MDN Web文档、Python官方文档及《JavaScript高级程序设计(第4版)》,JSON Schema验证工具见ajv.js.org,流式解析库ijson文档参考pypi.org/project/ijson。