Python进行JSON数据处理的全攻略

 更新时间:2025年07月08日 09:24:49   作者:橘子编程  
JSON是“JavaScript Object Notation”的缩写,它本来是JavaScript语言中创建对象的一种字面量语法,现在已经被广泛的应用于跨语言跨平台的数据交换,下面我们就来看看Python进行JSON数据处理的相关策略吧

JSON概述

在Python中,我们可以将程序中的数据以JSON格式进行保存。JSON是“JavaScript Object Notation”的缩写,它本来是JavaScript语言中创建对象的一种字面量语法,现在已经被广泛的应用于跨语言跨平台的数据交换。使用JSON的原因非常简单,因为它结构紧凑而且是纯文本,任何操作系统和编程语言都能处理纯文本,这就是实现跨语言跨平台数据交换的前提条件。目前JSON基本上已经取代了XML(可扩展标记语言)作为异构系统间交换数据的事实标准。可以在JSON的官方网站找到更多关于JSON的知识,这个网站还提供了每种语言处理JSON数据格式可以使用的工具或三方库。

在JSON中使用的数据类型(JavaScript数据类型)和Python中的数据类型也是很容易找到对应关系的,大家可以看看下面的两张表。

表1:JavaScript数据类型(值)对应的Python数据类型(值)

JSONPython
objectdict
arraylist
stringstr
numberint / float
number(real)float
boolean(true/ false)bool (True/ False)
nullNone

表2:Python数据类型(值)对应的JavaScript数据类型(值)

PythonJSON
dictobject
list/ tuplearray
strstring
int/ floatnumber
bool(True/ False)boolean(true / false)
Nonenull

python 中json模块有四个比较重要的函数,分别是:

  • dump - 将Python对象按照JSON格式序列化到文件中
  • dumps - 将Python对象处理成JSON格式的字符串
  • load - 将文件中的JSON数据反序列化成对象
  • loads - 将字符串的内容反序列化成Python对象

1. 基本JSON操作

import json
 
# Python字典数据
data = {
    "name": "张三",
    "age": 30,
    "is_student": False,
    "courses": ["数学", "英语", "计算机"],
    "address": {
        "street": "人民路123号",
        "city": "北京"
    }
}
 
# 将Python对象转换为JSON字符串
json_string = json.dumps(data, indent=4, ensure_ascii=False)
print("JSON字符串:")
print(json_string)
 
 
# 将JSON字符串保存到文件
with open('data.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, indent=4, ensure_ascii=False)
 
# 从文件读取JSON数据
with open('data.json', 'r', encoding='utf-8') as f:
    loaded_data = json.load(f)
 
print("\n从文件加载的数据:")
print(loaded_data)

2、复杂数据类型处理

import json
from datetime import datetime
 
# 包含复杂数据类型的Python对象
complex_data = {
    "timestamp": datetime.now(),
    "set_data": {1, 2, 3},
    "custom_object": type('CustomClass', (), {'attr': 'value'})
}
 
# 自定义JSON编码器处理复杂类型
class ComplexEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.isoformat()
        elif isinstance(obj, set):
            return list(obj)
        elif hasattr(obj, '__dict__'):
            return obj.__dict__
        return super().default(obj)
 
# 序列化复杂对象
json_string = json.dumps(complex_data, cls=ComplexEncoder, indent=2)
print("复杂对象JSON:")
print(json_string)

3. JSON配置文件管理

import json
import os
 
# 配置文件路径
CONFIG_FILE = 'config.json'
 
# 默认配置
default_config = {
    "app_name": "MyApp",
    "version": "1.0",
    "settings": {
        "theme": "dark",
        "language": "zh-CN",
        "auto_update": True
    }
}
 
# 检查并创建配置文件
if not os.path.exists(CONFIG_FILE):
    with open(CONFIG_FILE, 'w', encoding='utf-8') as f:
        json.dump(default_config, f, indent=4)
    print("已创建默认配置文件")
 
# 读取配置文件
with open(CONFIG_FILE, 'r', encoding='utf-8') as f:
    config = json.load(f)
 
print("当前配置:")
print(json.dumps(config, indent=4, ensure_ascii=False))
 
# 修改并保存配置
config['settings']['theme'] = 'light'
config['version'] = '1.1'
 
with open(CONFIG_FILE, 'w', encoding='utf-8') as f:
    json.dump(config, f, indent=4)
 
print("\n配置已更新")

4. 处理JSON API响应

import json
import urllib.request
from pprint import pprint
 
# 从API获取JSON数据
def fetch_json_data(url):
    with urllib.request.urlopen(url) as response:
        data = json.loads(response.read().decode('utf-8'))
    return data
 
# 示例API (JSONPlaceholder)
api_url = "https://jsonplaceholder.typicode.com/users/1"
 
try:
    user_data = fetch_json_data(api_url)
    print("从API获取的用户数据:")
    pprint(user_data)
    
    # 保存到本地
    with open('user_data.json', 'w', encoding='utf-8') as f:
        json.dump(user_data, f, indent=2, ensure_ascii=False)
    
    print("\n数据已保存到 user_data.json")
except Exception as e:
    print(f"获取数据时出错: {e}")

5. JSON数据验证

import json
from jsonschema import validate, ValidationError
 
# JSON数据
user_data = {
    "id": 1,
    "name": "John Doe",
    "email": "john@example.com",
    "age": 30
}
 
# JSON Schema定义
schema = {
    "type": "object",
    "properties": {
        "id": {"type": "number"},
        "name": {"type": "string"},
        "email": {"type": "string", "format": "email"},
        "age": {"type": "number", "minimum": 18}
    },
    "required": ["id", "name", "email"]
}
 
# 验证JSON数据
try:
    validate(instance=user_data, schema=schema)
    print("JSON数据验证通过")
except ValidationError as e:
    print(f"验证错误: {e}")

6.包管理工具pip

Python标准库中的json模块在数据序列化和反序列化时性能并不是非常理想,为了解决这个问题,可以使用三方库ujson来替换json。所谓三方库,是指非公司内部开发和使用的,也不是来自于官方标准库的Python模块,这些模块通常由其他公司、组织或个人开发,所以被称为三方库。虽然Python语言的标准库虽然已经提供了诸多模块来方便我们的开发,但是对于一个强大的语言来说,它的生态圈一定也是非常繁荣的。

之前安装Python解释器时,默认情况下已经勾选了安装pip,大家可以在命令提示符或终端中通过pip --version来确定是否已经拥有了pip。pip是Python的包管理工具,通过pip可以查找、安装、卸载、更新Python的三方库或工具,macOS和Linux系统应该使用pip3。例如要安装替代json模块的ujson,可以使用下面的命令。

pip install ujson

在默认情况下,pip会访问https://pypi.org/simple/来获得三方库相关的数据,但是国内访问这个网站的速度并不是十分理想,因此国内用户可以使用豆瓣网提供的镜像来替代这个默认的下载源,操作如下所示。

可以通过pip search命令根据名字查找需要的三方库,可以通过pip list命令来查看已经安装过的三方库。如果想更新某个三方库,可以使用pip install -Upip install --upgrade;如果要删除某个三方库,可以使用pip uninstall命令。

1、搜索ujson三方库

pip search ujson
 
pip index versions ujson (Python 3.10+查看可用的版本)

2、查看已经安装的三方库

pip list

3、更新ujson三方库

pip install -U ujson

4、删除ujson三方库

pip uninstall -y ujson

提示:如果要更新pip自身,对于macOS系统来说,可以使用命令pip install -U pip。在Windows系统上,可以将命令替换为python -m pip install -U --user pip

到此这篇关于Python进行JSON数据处理的全攻略的文章就介绍到这了,更多相关Python JSON数据处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python报错TypeError: ‘dict‘ object is not iterable的解决方法

    Python报错TypeError: ‘dict‘ object is not&

    在Python开发的旅程中,报错信息就像是一个个路障,阻碍着我们前进的步伐,而“TypeError: ‘dict’ object is not iterable”这个报错,常常让开发者们陷入困惑,那么,这个报错究竟是怎么产生的呢?又该如何有效地解决它呢?让我们一起深入探讨,找到解决问题的方法
    2024-10-10
  • numpy数组坐标轴问题解决

    numpy数组坐标轴问题解决

    本文主要介绍了numpy数组坐标轴问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python利用Selenium实现全网页截图

    Python利用Selenium实现全网页截图

    这篇文章主要为大家详细介绍了如何使用Python,Selenium和wxPython构建一个用户友好的网页截图工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2025-05-05
  • 超详细注释之OpenCV构建透明的叠加层

    超详细注释之OpenCV构建透明的叠加层

    这篇文章主要介绍了OpenCV构建透明的叠加层,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • python对一个数向上取整的实例方法

    python对一个数向上取整的实例方法

    在本篇文章中小编给大家整理了关于python对一个数向上取整的实例方法,需要的朋友们可以跟着学习下。
    2020-06-06
  • python将字符串转换成json的方法小结

    python将字符串转换成json的方法小结

    这篇文章主要介绍了python将字符串转换成json的方法小结,通过实例代码给大家介绍将字符串型的数据转换成dict类型遇到的问题,需要的朋友可以参考下
    2019-07-07
  • Python中的zip函数使用示例

    Python中的zip函数使用示例

    这篇文章主要介绍了Python中的zip函数使用示例,Python中的zip函数不是用来压缩文件的,而是用来传入参数返回一个tuple列表的,需要的朋友可以参考下
    2015-01-01
  • Python使用OpenCV进行标定

    Python使用OpenCV进行标定

    这篇文章主要介绍了Python使用OpenCV进行标定,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Python调用shell cmd方法代码示例解析

    Python调用shell cmd方法代码示例解析

    这篇文章主要介绍了Python调用shell cmd方法代码示例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python使用webdriver爬取微信公众号

    python使用webdriver爬取微信公众号

    这篇文章主要为大家详细介绍了python使用webdriver爬取微信公众号信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08

最新评论