【JSON 】全面掌握JSON的相关知识

🎯 JSON 全面学习指南

JSON(JavaScript Object Notation)是轻量级的数据交换格式,广泛应用于 Web API、配置文件和跨平台数据传输。以下是系统性学习 JSON 的完整路径:


一、JSON 基础语法

1. 数据结构
  • 对象(Object) : { "key": value }

    • 键必须用双引号包裹,值可以是任何类型。
  • 数组(Array) : [1, "text", true]

    • 有序的元素集合。
  • 值(Value) : 支持类型:

    json 复制代码
    {
      "string": "文本",
      "number": 123.45,
      "boolean": true,
      "null": null,
      "object": { "嵌套": "对象" },
      "array": [1, 2, 3]
    }
2. 语法规则
  • 所有键(Key)必须用双引号包裹。

  • 值间用逗号分隔,最后一个元素不能有逗号

  • 使用 UTF-8 编码,支持 Unicode 字符(如中文、Emoji)。

  • 示例:

    json 复制代码
    {
      "name": "张三",
      "age": 30,
      "skills": ["Python", "SQL", "JSON"],
      "isStudent": false,
      "address": {
        "city": "北京",
        "zipcode": "100000"
      }
    }

二、JSON 与编程语言

1. Python
  • 序列化(对象 → JSON 字符串)

    python 复制代码
    import json
    data = {"name": "Alice", "age": 25}
    json_str = json.dumps(data, indent=2, ensure_ascii=False)
    • indent: 格式化缩进。
    • ensure_ascii=False: 允许输出非 ASCII 字符(如中文)。
  • 反序列化(JSON 字符串 → 对象)

    python 复制代码
    json_str = '{"name": "Alice", "age": 25}'
    data = json.loads(json_str)
  • 处理文件

    python 复制代码
    # 写入 JSON 文件
    with open("data.json", "w", encoding="utf-8") as f:
        json.dump(data, f)
    
    # 读取 JSON 文件
    with open("data.json", "r") as f:
        data = json.load(f)

2. JavaScript
  • 序列化

    javascript 复制代码
    const data = { name: "Bob", age: 30 };
    const jsonStr = JSON.stringify(data, null, 2);
  • 反序列化

    javascript 复制代码
    const jsonStr = '{"name": "Bob", "age": 30}';
    const data = JSON.parse(jsonStr);

三、进阶应用场景

1. 处理复杂数据类型
  • 日期对象 :需手动转换为字符串(如 "2023-10-05T12:00:00Z")。

  • 自定义对象 :定义 defaultobject_hook 方法处理序列化/反序列化。

    python 复制代码
    class User:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    # 自定义序列化
    def user_encoder(obj):
        if isinstance(obj, User):
            return {"name": obj.name, "age": obj.age, "_type": "User"}
        raise TypeError("Object not serializable")
    
    user = User("Alice", 25)
    json_str = json.dumps(user, default=user_encoder)

2. JSON Schema 验证
  • 定义 JSON 结构规范,确保数据合法性。

  • 示例:验证用户数据格式

    json 复制代码
    {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "type": "object",
      "properties": {
        "name": { "type": "string" },
        "age": { "type": "number", "minimum": 0 }
      },
      "required": ["name", "age"]
    }

3. 流式处理大型 JSON 文件
  • 使用 ijson(Python)按需解析,避免内存溢出。

    python 复制代码
    import ijson
    with open("large_data.json", "r") as f:
        for item in ijson.items(f, "item"):
            process(item)

四、JSON 工具推荐

工具 用途 链接
JSONLint 在线验证和格式化 jsonlint.com
Postman API 测试与 JSON 调试 postman.com
jq (命令行) 终端下的 JSON 处理工具 stedolan.github.io/jq
JSON Viewer Pro Chrome 插件,格式化 JSON Chrome 应用商店

五、JSON 常见问题

1. 常见错误
  • 多余逗号 : { "a": 1, "b": 2, } → 最后一个逗号导致解析失败。
  • 键未用双引号 : { name: "Alice" } → 应为 { "name": "Alice" }
  • 注释问题 : JSON 标准不支持注释,但某些解析器允许 ///* */

2. JSON 与其他格式对比
格式 优点 缺点
JSON 简洁、易读、跨语言支持 不支持注释、无严格数据类型
XML 支持注释、命名空间、复杂结构 冗余、解析复杂度高
YAML 支持注释、更人性化的语法 缩进敏感、解析速度稍慢

六、实战练习

1. 解析天气预报 API 数据
python 复制代码
import requests
response = requests.get("https://api.weather.com/data/forecast")
data = response.json()
print(f"温度: {data['current']['temp']}℃")
2. 生成动态配置
json 复制代码
{
  "app": {
    "debug_mode": true,
    "max_users": 1000,
    "features": ["login", "search", "payment"]
  }
}

通过系统掌握 JSON 的语法、工具和实际应用,你将能高效处理各种数据交换需求! 🌟

相关推荐
Vic1010118 小时前
Hutool 的完整 JSON 工具类示例
开发语言·json
电商数据girl1 天前
如何利用API接口与网页爬虫协同进行电商平台商品数据采集?
大数据·开发语言·人工智能·python·django·json
拷斤锟1 天前
使用Excel解析从OData API获取到的JSON数据
数据库·json·excel
有育哥无奔波2 天前
是采用示例模板,还是采用json的结构化数据,哪种方式会让llm的输出更加稳定?
json
小小李程序员3 天前
JSON.parse解析大整数踩坑
开发语言·javascript·json
西哥写代码4 天前
基于dcmtk的dicom工具 第九章 以json文件或sqlite为数据源的worklist服务(附工程源码)
sqlite·json·mfc·dcmtk·worklist
Mu.3874 天前
JSON解析
json
我今晚不熬夜4 天前
JSON在java中的使用
java·开发语言·json
妮妮喔妮5 天前
重构vite.config.json
javascript·重构·json
患得患失9496 天前
【前端】【vscode】【.vscode/settings.json】为单个项目配置自动格式化和开发环境
前端·vscode·json