python读写json、格式化写入json文件实现方式

 更新时间:2025年10月24日 08:53:24   作者:尤达c  
文章介绍了JSON和Python序列化操作,对比了json和pickle模块的特点,详细讲解了json模块的核心方法、数据类型限制以及JSON文件格式化技巧

JSON与Python序列化操作指南

一、JSON概述

定义

JSON(JavaScript Object Notation)是一种轻量级数据交换格式,基于ECMAScript子集,具有以下特性:

  • 语言无关的文本格式
  • 语法类似C语言家族(C/C++/Java/JavaScript等)
  • 人类可读且机器高效解析
  • 广泛用于网络数据传输

Python中的映射关系

JSON数组   ↔ Python列表(list)
JSON对象  ↔ Python字典(dict)

二、序列化模块对比

特性json 模块pickle 模块
跨语言支持✔️ (多语言兼容)❌ (仅Python)
数据类型支持基础类型(字典/列表/字符串/数字)所有Python类型(类/函数等)
安全性高(无代码执行风险)低(可能执行任意代码)
典型用途API数据交换、配置文件Python对象持久化存储

三、json模块核心方法

1. dumps():数据类型 → JSON字符串

import json

test_dict = {'one': 1, 'two': {2.1: ['a', 'b']}}
json_str = json.dumps(test_dict)  # 关键操作

print(f"原始类型: {type(test_dict)}")  # <class 'dict'>
print(f"转换后类型: {type(json_str)}")  # <class 'str'>
print(f"JSON字符串: {json_str}")      # {"one": 1, "two": {"2.1": ["a", "b"]}}

注意:键2.1会被转换为字符串(JSON规范要求键必须是字符串)

2. loads():JSON字符串 → Python数据类型

new_dict = json.loads(json_str)  # 解析JSON字符串

print(f"解析后类型: {type(new_dict)}")  # <class 'dict'>
print(f"内容: {new_dict}")             # {'one': 1, 'two': {'2.1': ['a', 'b']}}

3. dump():字典 → JSON文件

with open("record.json", "w") as f:
    json.dump(new_dict, f)  # 写入文件
    print("JSON文件写入完成")

生成文件内容

{"one": 1, "two": {"2.1": ["a", "b"]}}

4. load():JSON文件 → Python字典

with open("record.json", "r") as load_f:
    load_dict = json.load(load_f)  # 从文件加载

print(f"文件解析类型: {type(load_dict)}")  # <class 'dict'>
print(f"内容: {load_dict}")               # {'one': 1, 'two': {'2.1': ['a', 'b']}}

四、JSON文件格式化技巧

两种等效实现方式:

# 方法1:dumps() + 手动写入
with open("format_json.json", "w") as f:
    f.write(json.dumps(load_dict, indent=4, ensure_ascii=False))

# 方法2:直接使用dump()参数
with open("format_json.json", "w") as f:
    json.dump(load_dict, f, indent=4, ensure_ascii=False)

关键参数

  • indent=4:4空格缩进格式化
  • ensure_ascii=False:支持非ASCII字符(如中文)

格式化后文件

{
    "one": 1,
    "two": {
        "2.1": [
            "a",
            "b"
        ]
    }
}

核心总结

基础转换

  • dumps/loads:内存对象 ↔ JSON字符串
  • dump/load:文件 ↔ 内存对象

数据类型限制

JSON不支持Python特有类型(如日期/类对象),此时需用pickle

最佳实践

# 写入推荐
json.dump(data, file, indent=2, ensure_ascii=False) 

# 读取推荐
with open("data.json") as f:
    data = json.load(f)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解决PyCharm无法使用lxml库的问题(图解)

    解决PyCharm无法使用lxml库的问题(图解)

    这篇文章主要介绍了解决PyCharm无法使用lxml库的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Python requests库参数提交的注意事项总结

    Python requests库参数提交的注意事项总结

    这篇文章主要给大家介绍了关于Python requests库参数提交的注意事项,文中通过示例代码和图片介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 简介二分查找算法与相关的Python实现示例

    简介二分查找算法与相关的Python实现示例

    这篇文章主要介绍了二分查找算法与相关的Python实现示例,Binary Search同时也是算法学习当中最基础的知识,需要的朋友可以参考下
    2015-08-08
  • 使用pytest结合Playwright实现页面元素在两个区域间拖拽功能

    使用pytest结合Playwright实现页面元素在两个区域间拖拽功能

    本文介绍了如何使用pytest结合Playwright实现页面元素在两个区域间的拖拽操作,通过创建一个简单的HTML页面和JavaScript代码来实现拖放功能,并使用Playwright的API来模拟和验证拖拽操作,需要的朋友可以参考下
    2026-01-01
  • Python使用sys.argv与argparse进行命令行参数处理

    Python使用sys.argv与argparse进行命令行参数处理

    在Python开发中,命令行参数处理是高频需求, 小到快速编写的测试脚本,大到生产级的命令行工具,都需要接收外部传入的参数并解析,Python提供了多种处理命令行参数的方式,其中sys.argv和argparse是最常用的两种,本文将结合实战代码,深度解析两者的特点及区别
    2026-03-03
  • python 爬取吉首大学网站成绩单

    python 爬取吉首大学网站成绩单

    python简单爬虫,爬取吉首大学成绩单,学校的成绩单居然不支持导出,太坑了,算个绩点居然还要手打,我吐了.花2个多小时写了此python程序来生成可方便求和平均的Excel文件,帮助JSU学子脱离手算烦恼...
    2021-06-06
  • Python 文档解析lxml库的使用详解

    Python 文档解析lxml库的使用详解

    lxml 是 Python 常用的文档解析库,能够高效地解析 HTML/XML 文档,常用于 Python 爬虫,这篇文章主要介绍了Python 文档解析:lxml库的使用,需要的朋友可以参考下
    2022-09-09
  • Python写入CSV文件的方法

    Python写入CSV文件的方法

    这篇文章主要介绍了Python写入CSV文件的方法,涉及Python使用csv模块操作csv文件读写的相关技巧,非常简单实用,需要的朋友可以参考下
    2015-07-07
  • python中pyc、 pyd文件及生成使用完整实例代码

    python中pyc、 pyd文件及生成使用完整实例代码

    这篇文章主要介绍了python中pyc、 pyd文件及生成使用的相关资料,重点讲解了如何使用Python解释器编译.py文件为.pyc文件,以及如何使用Cython和distutils工具将C/C++代码编译为.pyd文件,需要的朋友可以参考下
    2025-04-04
  • 利用Jmeter实现在请求param和body里面加入随机参数

    利用Jmeter实现在请求param和body里面加入随机参数

    本文介绍了如何使用jemeter实现新增接口压力测试中的随机参数生成,首先,使用函数助手对话框生成随机数,然后将生成的随机数作为参数放入请求中,无论请求格式是json、xml还是text等,如果param和body同时存在并需要随机生成参数,可以把参数写入到请求地址中
    2024-10-10

最新评论