当前位置: 代码网 > it编程>前端脚本>Python > Python3入门之JSON数据解析全面学习教程

Python3入门之JSON数据解析全面学习教程

2025年11月28日 Python 我要评论
前言python作为一门简洁、易读、功能强大的编程语言,其基础语法是入门学习的核心。掌握好基础语法,能为后续的编程实践打下坚实的基础。本文将全面讲解python3的基础语法知识,适合编程初学者系统学习

前言

python作为一门简洁、易读、功能强大的编程语言,其基础语法是入门学习的核心。掌握好基础语法,能为后续的编程实践打下坚实的基础。本文将全面讲解python3的基础语法知识,适合编程初学者系统学习。python以其简洁优雅的语法和强大的通用性,成为当今最受欢迎的编程语言。本专栏旨在系统性地带你从零基础入门到精通python核心。无论你是零基础小白还是希望进阶的专业开发者,都将通过清晰的讲解、丰富的实例和实战项目,逐步掌握语法基础、核心数据结构、函数与模块、面向对象编程、文件处理、主流库应用(如数据分析、web开发、自动化)以及面向对象高级特性,最终具备独立开发能力和解决复杂问题的思维,高效应对数据分析、人工智能、web应用、自动化脚本等广泛领域的实际需求。

在当今的数据交换场景中,json(javascript object notation)凭借其轻量级、易读易写的特性,成为了前后端交互、api数据传输的主流格式。而python作为数据分析和后端开发的热门语言,内置了json模块来高效处理json数据。本文将从json基础概念入手,详细讲解python3中json模块的核心函数用法,结合实例帮助你快速掌握json数据的编解码技巧。

一、json基础:为什么它如此重要

json是一种基于文本的轻量级数据交换格式,它源于javascript,但如今已成为跨语言、跨平台的数据交换标准。相比于xml,json语法更简洁、解析速度更快,非常适合传输结构化数据(如用户信息、接口返回结果等)。

如果你对json语法尚不熟悉,可以先了解其核心数据类型:

  • 对象(对应python的字典):用{key: value}表示,键值对之间用逗号分隔
  • 数组(对应python的列表):用[value1, value2, ...]表示
  • 基本类型:字符串(双引号包裹)、数字(整数/浮点数)、布尔值(true/false)、空值(null

二、python3json模块核心函数

python3的标准库json模块提供了4个核心函数,分别用于字符串级别的编解码文件级别的编解码,覆盖了绝大多数json处理场景。

函数用途函数名核心作用
python数据编码为json字符串json.dumps()将python原生数据类型转换为json格式字符串
json字符串解码为python数据json.loads()将json格式字符串转换为python原生数据类型
python数据写入json文件json.dump()将python数据直接写入文件(json格式)
从json文件读取python数据json.load()从json文件中读取数据并转换为python类型

三、关键知识点:python与json类型对应关系

在编解码过程中,python原生类型与json类型会自动转换,理解对应关系是避免数据异常的关键。

1. python编码为json的类型映射

当使用json.dumps()json.dump()时,python数据会按照以下规则转换为json类型:

python原生类型转换后的json类型示例
dict(字典)object(对象){'name': 'xcleigh'} → {"name": "xcleigh"}
list(列表)、tuple(元组)array(数组)[1, 2, 3] → [1,2,3];(1,2,3) → [1,2,3]
str(字符串)string(字符串)"python" → "python"
int/float(整数/浮点数)number(数字)100 → 100;3.14 → 3.14
true(布尔值)truetrue → true
false(布尔值)falsefalse → false
none(空值)nullnone → null

2. json解码为python的类型映射

当使用json.loads()json.load()时,json类型会按照以下规则转换为python类型:

json类型转换后的python类型示例
object(对象)dict(字典){"no": 1} → {'no': 1}
array(数组)list(列表)["xcleigh", "python"] → ['xcleigh', 'python']
string(字符串)str(字符串)"https://xcleigh.blog.csdn.net/" → "https://xcleigh.blog.csdn.net/"
number(int)(整数)int(整数)10 → 10
number(real)(浮点数)float(浮点数)3.14 → 3.14
truetruetrue → true
falsefalsefalse → false
nullnonenull → none

四、实战案例:从字符串到文件的完整操作

理论结合实践才能快速掌握,下面通过3个递进的案例,演示json模块的核心用法。

案例1:python数据编码为json字符串(json.dumps())

将python字典(最常用的结构化数据类型)转换为json字符串,方便后续传输或存储。

#!/usr/bin/python3
import json

# 1. 定义python字典(原始数据)
data = {
    'no': 1,
    'name': 'xcleigh',
    'url': 'https://xcleigh.blog.csdn.net/',
    'is_active': true,
    'tags': ['python', 'json', '教程'],
    'score': 98.5,
    'extra_info': none
}

# 2. 使用json.dumps()编码为json字符串
json_str = json.dumps(data)

# 3. 打印结果对比
print("python原始数据(字典类型):", repr(data))
print("json字符串(类型):", json_str)
print("json字符串的类型:", type(json_str))  # 输出 <class 'str'>

运行结果

python原始数据(字典类型): {'no': 1, 'name': 'xcleigh', 'url': 'https://xcleigh.blog.csdn.net/', 'is_active': true, 'tags': ['python', 'json', '教程'], 'score': 98.5, 'extra_info': none}
json字符串(类型): {"no": 1, "name": "xcleigh", "url": "https://xcleigh.blog.csdn.net/", "is_active": true, "tags": ["python", "json", "教程"], "score": 98.5, "extra_info": null}
json字符串的类型: <class 'str'>

关键说明

  • python的true转换为json的truenone转换为null(json语法要求小写)
  • python字典的键是字符串时,json字符串的键会自动用双引号包裹(json键必须是双引号字符串)

案例2:json字符串解码为python数据(json.loads())

将api返回的json字符串(或前端传递的json数据)转换为python字典,方便后续数据处理(如提取字段、计算等)。

#!/usr/bin/python3
import json

# 1. 模拟一个json字符串(例如api返回结果)
json_str = '''
{
    "no": 1,
    "name": "xcleigh",
    "url": "https://xcleigh.blog.csdn.net/",
    "is_active": true,
    "tags": ["python", "json", "教程"],
    "score": 98.5,
    "extra_info": null
}
'''

# 2. 使用json.loads()解码为python字典
data = json.loads(json_str)

# 3. 提取并使用数据
print("解码后的python数据类型:", type(data))  # 输出 <class 'dict'>
print("网站名称:", data['name'])           # 输出 xcleigh
print("网站url:", data['url'])            # 输出 https://xcleigh.blog.csdn.net/
print("是否活跃:", data['is_active'])     # 输出 true
print("标签列表:", data['tags'][0])       # 输出 python(提取列表第一个元素)

运行结果

解码后的python数据类型: <class 'dict'>
网站名称: xcleigh
网站url:https://xcleigh.blog.csdn.net/
是否活跃: true
标签列表: python

关键说明

  • json字符串中的true会转换为python的truenull转换为none
  • 解码后的数据可以直接用python字典的语法操作(如data['key']提取值)

案例3:python数据与json文件的交互(json.dump()/json.load())

当需要持久化存储json数据(如配置文件、日志数据)时,直接使用json.dump()json.load()操作文件,无需手动处理字符串写入/读取。

步骤1:将python数据写入json文件(json.dump())

#!/usr/bin/python3
import json

# 1. 定义python数据
data = {
    'no': 1,
    'name': 'xcleigh',
    'url': 'https://xcleigh.blog.csdn.net/',
    'tags': ['python', 'json']
}

# 2. 使用with语句打开文件,自动管理文件关闭
with open('data.json', 'w', encoding='utf-8') as f:
    # json.dump(数据, 文件对象)
    json.dump(data, f, ensure_ascii=false, indent=4)

print("json数据已成功写入data.json文件")

参数说明

  • ensure_ascii=false:允许写入非ascii字符(如中文),避免乱码
  • indent=4:格式化输出,缩进4个空格,增强文件可读性

运行后会生成data.json文件,内容如下:

{
    "no": 1,
    "name": "xcleigh",
    "url": "https://xcleigh.blog.csdn.net/",
    "tags": [
        "python",
        "json"
    ]
}

步骤2:从json文件读取数据(json.load())

#!/usr/bin/python3
import json

# 1. 使用with语句读取文件
with open('data.json', 'r', encoding='utf-8') as f:
    # json.load(文件对象):读取文件并解码为python数据
    data = json.load(f)

# 2. 使用读取到的数据
print("从文件读取的python数据:", data)
print("网站名称:", data['name'])
print("标签数量:", len(data['tags']))

运行结果

从文件读取的python数据: {'no': 1, 'name': 'xcleigh', 'url': 'https://xcleigh.blog.csdn.net/', 'tags': ['python', 'json']}
网站名称: xcleigh
标签数量: 2

五、常见问题与注意事项

数据类型不匹配错误:若python数据中包含json模块不支持的类型(如datetime对象、自定义类实例),直接编码会报错。解决方案:自定义default参数(如json.dumps(data, default=str)将不支持的类型转为字符串)。

文件编码问题:写入/读取json文件时,务必指定encoding='utf-8',否则中文等非ascii字符可能出现乱码。

dumpsdumploadsload的区别

  • s的函数(dumps/loads):操作字符串,适用于内存中的数据处理(如api交互)。
  • 不带s的函数(dump/load):操作文件对象,适用于文件持久化存储。

到此这篇关于python3入门之json数据解析全面学习教程的文章就介绍到这了,更多相关python3 json数据解析内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com