Python3 JSON数据解析

Python3 JSON解析知识点大全

Python3 JSON解析完全指南

专为编程初学者设计的JSON解析知识点汇总,用通俗易懂的语言讲解Python中的JSON处理

什么是JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,但使用了类似于JavaScript对象的结构。

简单理解: JSON就像是一种在不同程序之间传递数据的”通用语言”,无论是Python、JavaScript还是Java都能理解。

JSON的主要特点:

  • 易于人阅读和编写
  • 易于机器解析和生成
  • 基于JavaScript编程语言的子集
  • 完全独立于编程语言
JSON数据示例
{
  “name”: “张三”,
  “age”: 28,
  “is_student”: false,
  “courses”: [“数学”, “英语”, “编程”],
  “address”: {
    “city”: “北京”,
    “postal_code”: “100000”
  }
}
JSON与Python数据类型对照表

Python处理JSON时,会自动进行数据类型转换:

JSON 类型 Python 类型 示例
对象 (object) 字典 (dict) {"name": "John"}{'name': 'John'}
数组 (array) 列表 (list) [1, 2, 3][1, 2, 3]
字符串 (string) 字符串 (str) "hello"'hello'
数字 (number) 整数(int) 或 浮点数(float) 4242, 3.143.14
布尔值 (true/false) 布尔值 (True/False) trueTrue, falseFalse
null None nullNone
JSON数据 Python数据结构
# JSON字符串
json_str = ‘{ “name”: “李四”, “age”: 35, “married”: true }’

# 使用json.loads()转换为Python字典
import json
data = json.loads(json_str)
# 输出: {‘name’: ‘李四’, ‘age’: 35, ‘married’: True}
Python JSON模块的四个核心方法

Python内置了json模块,无需额外安装,包含四个主要方法:

1. json.loads() – 解析JSON字符串

作用: 将JSON格式的字符串转换为Python数据类型(通常是字典)

使用场景: 从网络请求响应、文本文件中读取到JSON字符串时

import json

# JSON字符串
json_string = ‘{“name”: “王五”, “age”: 25, “city”: “上海”}’

# 将JSON字符串解析为Python字典
data = json.loads(json_string)

# 访问解析后的数据
print(data[‘name’]) # 输出: 王五
print(data[‘age’]) # 输出: 25

2. json.dumps() – 生成JSON字符串

作用: 将Python数据类型(如字典)转换为JSON格式的字符串

使用场景: 需要将Python数据发送给其他程序或存入文件时

import json

# Python字典
person = {
  “name”: “赵六”,
  “age”: 30,
  “hobbies”: [“阅读”, “旅行”, “摄影”]
}

# 将Python字典转换为JSON字符串
json_data = json.dumps(person, ensure_ascii=False)

# 输出JSON字符串
print(json_data) # 输出: {“name”: “赵六”, “age”: 30, “hobbies”: [“阅读”, “旅行”, “摄影”]}
# 注意: ensure_ascii=False 确保中文字符正常显示

3. json.load() – 读取JSON文件

作用:文件对象中读取JSON数据并转换为Python数据类型

使用场景: 从JSON文件中读取数据

import json

# 从文件读取JSON数据
with open(‘data.json’, ‘r’, encoding=‘utf-8’) as file:
  data = json.load(file)

# 访问数据
print(data[‘company’]) # 假设data.json中有company字段

4. json.dump() – 写入JSON文件

作用: 将Python数据类型转换为JSON格式并写入文件对象

使用场景: 将Python数据保存为JSON文件

import json

# Python字典
product = {
  “id”: 101,
  “name”: “笔记本电脑”,
  “price”: 5999.99,
  “in_stock”: True
}

# 将数据写入JSON文件
with open(‘product.json’, ‘w’, encoding=‘utf-8’) as file:
  json.dump(product, file, ensure_ascii=False, indent=4)

# 文件内容:
#{
# “id”: 101,
# “name”: “笔记本电脑”,
# “price”: 5999.99,
# “in_stock”: true
#}
JSON处理实用技巧
格式化输出

使用indent参数让输出的JSON更易读:

json_str = json.dumps(data, indent=4, ensure_ascii=False)
按键排序

使用sort_keys参数让JSON键按字母顺序排序:

json_str = json.dumps(data, sort_keys=True)
处理自定义对象

使用default参数处理JSON不支持的数据类型:

def custom_converter(obj):
  if isinstance(obj, datetime):
    return obj.strftime(‘%Y-%m-%d’)

json_str = json.dumps(data, default=custom_converter)
加速处理

对于大型JSON数据,可使用第三方库加速:

  • ujson – 更快的JSON处理
  • orjson – Rust编写的高性能JSON库
常见错误与解决方法
JSONDecodeError – JSON格式错误

原因: JSON字符串格式不正确(如缺少引号、逗号或花括号)

# 错误的JSON:键缺少引号
json_string = ‘{name: “张三”}’ # 应该为 ‘{“name”: “张三”}’

解决: 使用JSON验证工具检查格式

TypeError – 包含不支持的类型

原因: 尝试序列化JSON不支持的类型(如datetime对象)

data = {
  “event”: “会议”,
  “time”: datetime.now() # 错误!
}
json.dumps(data) # 引发TypeError

解决: 使用default参数提供自定义转换函数

UnicodeEncodeError – 编码问题

原因: 处理非ASCII字符(如中文)时未正确设置编码

解决: 使用ensure_ascii=False并指定文件编码

# 写入文件时
with open(‘data.json’, ‘w’, encoding=‘utf-8’) as f:
  json.dump(data, f, ensure_ascii=False)

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部