第 1.3 章:JSON 格式
学习时间: 35 分钟
1. JSON:宇宙通信语言
想象一下,一个太空探测器和任务控制中心说着不同的语言。JSON (JavaScript Object Notation) 是一种通用数据语言,人类和机器都能理解。就像宇航员的国际语言一样!
主要特性:
- 🪶 轻量:即使在信号微弱时也能快速传输
- 👀 可读性强:结构一目了然
- 🔄 通用:所有编程语言都支持
💡 宇宙类比:
JSON 就像一份包含星体数据的数字电报。它使用清晰的
{键: 值}
结构,而非摩尔斯电码。
2. JSON 消息的剖析
JSON 由两种类型的结构组成:
A. 对象(宇宙飞船)
B. 数组(星团)
[
{"name": "Sirius", "magnitude": -1.46},
{"name": "Canopus", "magnitude": -0.74},
{"name": "Arcturus", "magnitude": -0.05}
]
⚡ 语法规则:
- 键使用双引号
" "
- 值:字符串、数字、布尔值 (
true
/false
)、null
- 数据用逗号分隔
- 对象使用花括号
{}
, 数组使用方括号[]
3. JSON 对比 XML:格式之战
参数 | JSON (现代卫星) | XML (老式望远镜) |
---|---|---|
可读性 | 高(直接访问字段) | 低(标签 <planet>...</planet> ) |
大小 | 紧凑 | 臃肿(体积增加 +30%) |
处理 | 快速 | 缓慢 |
示例 | {"planet": "Mars"} |
<planet>Mars</planet> |
🔭 为什么 JSON 在宇宙中胜出?
NASA、SpaceX 和 ESA 的 API 都使用 JSON——它非常适合数据传输!
4. 代码中的 JSON 操作
Python 示例(获取月球数据):
import requests
import json
# 使用真实 API,例如获取太阳系数据
# 来自 The Solar System OpenData API
try:
response = requests.get("https://api.le-systeme-solaire.net/rest/bodies/terre")
response.raise_for_status() # 检查 HTTP 错误 (4xx, 5xx)
planet_data = response.json()
print(f"名称: {planet_data['englishName']}")
print(f"卫星: {[moon['moon'] for moon in planet_data['moons']]}")
# 将 Python 字典转换为 JSON 字符串以保存
planet_json_str = json.dumps(planet_data, indent=2, ensure_ascii=False) # ensure_ascii=False 用于处理非 ASCII 字符(如西里尔字母)
print("\n--- 格式化后的 JSON ---")
print(planet_json_str)
except requests.exceptions.RequestException as e:
print(f"请求错误: {e}")
JavaScript 示例(处理望远镜数据):
const Data = `{
"id": "terre",
"name": "La Terre",
"englishName": "Earth",
"isPlanet": true,
"moons": [
{
"moon": "La Lune",
"rel": "https://api.le-systeme-solaire.net/rest/bodies/lune"
}
],
"semimajorAxis": 149598023,
"perihelion": 147095000,
"aphelion": 152100000,
"eccentricity": 0.0167,
"inclination": 0,
"mass": {
"massValue": 5.97237,
"massExponent": 24
},
"vol": {
"volValue": 1.08321,
"volExponent": 12
},
"density": 5.5136,
"gravity": 9.8,
"escape": 11190,
"meanRadius": 6371.0084,
"equaRadius": 6378.1366,
"polarRadius": 6356.8,
"flattening": 0.00335,
"dimension": "",
"sideralOrbit": 365.256,
"sideralRotation": 23.9345,
"aroundPlanet": null,
"discoveredBy": "",
"discoveryDate": "",
"alternativeName": "",
"axialTilt": 23.4393,
"avgTemp": 288,
"mainAnomaly": 358.617,
"argPeriapsis": 85.901,
"longAscNode": 18.272,
"bodyType": "Planet"
}`;
const dataObj = JSON.parse(Data);
console.log(dataObj.target);
5. JSON 验证:“信号”检查
在使用数据之前,请确保 JSON:
-
结构正确(检查括号!)
-
包含预期的字段
-
没有语法错误
工具: - JSONLint(JSON 的“太空垃圾探测器”) - 内置语言解析器(在格式不正确时会抛出错误)
⚠️ 错误示例:
{"planet": "Mars"
→ 缺少闭合括号!解决方案:始终在 Python 中使用
json.loads()
或在 JS 中使用JSON.parse()
进行检查。
巩固测验
🚀 本章总结:
JSON 是 API 世界的“宇宙世界语”。了解其结构后,您将能够:
-
📡 接收来自望远镜和探测器的数据
-
🔧 在系统之间转换信息
-
🛰️ 将科学数据保存到文件中
准备对接! 在下一章中,我们将学习 REST API 架构——您服务器的“空间站”管理系统。
📌 实践: 访问 NASA Open APIs,找到小行星 API (Asteroids NeoWs) 并研究响应中的 JSON 结构!