当前位置: 首页 > news >正文

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

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


一、JSON 基础语法

1. 数据结构
  • 对象(Object): { "key": value }
    • 键必须用双引号包裹,值可以是任何类型。
  • 数组(Array): [1, "text", true]
    • 有序的元素集合。
  • 值(Value): 支持类型:
    {"string": "文本","number": 123.45,"boolean": true,"null": null,"object": { "嵌套": "对象" },"array": [1, 2, 3]
    }
    
2. 语法规则
  • 所有键(Key)必须用双引号包裹。
  • 值间用逗号分隔,最后一个元素不能有逗号
  • 使用 UTF-8 编码,支持 Unicode 字符(如中文、Emoji)。
  • 示例:
    {"name": "张三","age": 30,"skills": ["Python", "SQL", "JSON"],"isStudent": false,"address": {"city": "北京","zipcode": "100000"}
    }
    

二、JSON 与编程语言

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

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

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

    # 写入 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
  • 序列化

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

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

三、进阶应用场景

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

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

    class User:def __init__(self, name, age):self.name = nameself.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 结构规范,确保数据合法性。
  • 示例:验证用户数据格式
    {"$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)按需解析,避免内存溢出。
    import ijson
    with open("large_data.json", "r") as f:for item in ijson.items(f, "item"):process(item)
    

四、JSON 工具推荐

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

五、JSON 常见问题

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

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

六、实战练习

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

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

http://www.xdnf.cn/news/636535.html

相关文章:

  • 上海医日健集团物联网专利技术领跑智慧药房赛道
  • C++编程单例模式详细解释---模拟一个网络配置管理器,负责管理和分发网络连接参数
  • 【OCCT+ImGUI系列】010-BRepMesh-网格化IncrementalMesh
  • 文本特征提取
  • GO 语言进阶之 进程 OS与 编码,数据格式转换
  • 【Leetcode 每日一题】2131. 连接两字母单词得到的最长回文串
  • 39.组合总和
  • leetcode560-和为k的子数组
  • arxml文件
  • JVM 的类加载机制
  • 进程管理(第二、三、四章)
  • 【车用永磁同步电机随机开关频率控制策略:高频谐波抑制的工程实践】
  • Python入门手册:条件判断
  • 云原生安全之网络IP协议:从基础到实践指南
  • mysql都有哪些锁?
  • 历年北京理工大学保研上机真题
  • 分布式缓存:ZSET → MGET 跨槽(cross‐slot)/ 并发 GET解决思路
  • 第十九章:数据治理之数据指标(一):数据指标工具之【指标口径管理系统】与【指标数据查询系统】
  • AnyIOasyncio 现代化方法
  • Ntfs!NtfsReadBootSector函数分析之nt!CcGetVacbMiss中得到一个nt!_VACB结构
  • 李宏毅《机器学习2025》笔记 第二讲 —— AI Agent
  • Dubbo与OpenFeign的区别
  • Apache 高级配置实战:从连接保持到日志分析的完整指南
  • 用python实现中国象棋
  • Tool-Star新突破!RL赋能LLM多工具协同推理,性能全面超越基线方法
  • Linux的进程控制
  • 基于RedisBloom的JWT黑名单管理方案
  • 【2025】ubuntu22.04 docker安装全过程
  • Odoo 前端开发框架技术全面解析
  • Odoo: Owl Props 深度解析技术指南