Skip to content

第 1.3 章:JSON 格式

学习时间: 35 分钟


1. JSON:宇宙通信语言

想象一下,一个太空探测器和任务控制中心说着不同的语言。JSON (JavaScript Object Notation) 是一种通用数据语言,人类和机器都能理解。就像宇航员的国际语言一样!

主要特性:

  • 🪶 轻量:即使在信号微弱时也能快速传输
  • 👀 可读性强:结构一目了然
  • 🔄 通用:所有编程语言都支持

💡 宇宙类比:

JSON 就像一份包含星体数据的数字电报。它使用清晰的 {键: 值} 结构,而非摩尔斯电码。


2. JSON 消息的剖析

JSON 由两种类型的结构组成:

A. 对象(宇宙飞船)

{
  "name": "Voyager-1",
  "launch_year": 1977,
  "is_active": true,
  "position": [-19.1, 42.7, 0.3]
}

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:

  1. 结构正确(检查括号!)

  2. 包含预期的字段

  3. 没有语法错误

工具: - JSONLint(JSON 的“太空垃圾探测器”) - 内置语言解析器(在格式不正确时会抛出错误)

⚠️ 错误示例:

{"planet": "Mars" → 缺少闭合括号!

解决方案:始终在 Python 中使用 json.loads() 或在 JS 中使用 JSON.parse() 进行检查。


巩固测验

1. JSON 的全称是...

2. JSON 中如何表示一个对象:

3. 以下哪项不是 JSON 中的有效值?

4. 为什么 JSON 比 XML 更适合宇宙相关的 API?

5. 如何将 JSON 字符串转换为 Python 对象?


🚀 本章总结:

JSON 是 API 世界的“宇宙世界语”。了解其结构后,您将能够:

  • 📡 接收来自望远镜和探测器的数据

  • 🔧 在系统之间转换信息

  • 🛰️ 将科学数据保存到文件中

准备对接! 在下一章中,我们将学习 REST API 架构——您服务器的“空间站”管理系统。

📌 实践: 访问 NASA Open APIs,找到小行星 API (Asteroids NeoWs) 并研究响应中的 JSON 结构!