【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 的语法、工具和实际应用,你将能高效处理各种数据交换需求! 🌟

相关推荐
lwb_01188 小时前
Spring MVC参数绑定终极手册:单&多参对象集合JSON文件上传精讲
spring·json·mvc
电商数据girl1 天前
【经验分享】浅谈京东商品SKU接口的技术实现原理
java·开发语言·前端·数据库·经验分享·eclipse·json
亚林瓜子1 天前
AWS S3拒绝非https的请求访问
https·云计算·json·ssl·aws·s3
于本淡2 天前
一篇文章快速学会HTML
开发语言·前端·数据结构·qt·html·json·html5
HaiQinyanAN2 天前
【学习笔记】nlohmannjson&&cjson
c++·笔记·学习·json
Code季风2 天前
学习 Protobuf:序列化、反序列化及与 JSON 的对比
学习·rpc·golang·json
Code季风2 天前
跨语言RPC:使用Java客户端调用Go服务端的JSON-RPC服务
java·网络协议·rpc·golang·json
終不似少年遊*3 天前
【软测】接口测试 - 用postman测试软件登录模块
软件测试·测试工具·json·postman·web·可用性测试
kooboo china.5 天前
JSON 编辑器:从语法到数据处理(二)
编辑器·json
ifanatic5 天前
[每周一更]-(第147期):使用 Go 语言实现 JSON Web Token (JWT)
前端·golang·json