Python操作JSON文件的知识点整理
作者:梦想橡皮擦 发布时间:2022-10-23 05:45:01
json 模块
Python 提供了内置的 json 模块来处理 JSON 格式的文件。
该模块主要分为读取和写入 JSON 文件。
读取 JSON
使用 json.load() 或 json.loads() 方法来读取 JSON 文件。
其中 json.load() 方法用于读取文件中的 JSON 数据,json.loads() 方法用于读取字符串中的 JSON 数据。
写入 JSON
使用 json.dump() 或 json.dumps() 方法来写入 JSON 文件。
其中 json.dump() 方法用于写入 JSON 数据到文件中,json.dumps() 方法用于将 JSON 数据转换为字符串。
基于上述内容可以总结一下: json.load() , json.loads() , json.dump() 和 json.dumps() 中的 s 都是字符串 string 的缩写。
读取与写入基本用法如下
提前准备一个 travel.json 文件,存放到 python 文件所在目录。
import json
# 读取json文件
with open('travel.json', 'r', encoding='utf-8') as f:
data = json.load(f)
# 写入json文件
with open('travel.new.json', 'w', encoding='utf-8') as f:
json.dump(data, f)
Tops:在使用 json.load() 和 json.loads() 读取 json 文件时,如果文件中存在格式错误,会抛出 ValueError 异常。
json 模块进阶用法
控制输出格式
在处理 JSON 文件时,还可以使用 json.dump() 方法的可选参数来控制输出的格式,例如:
sort_keys:按照键的字典序排序输出。
indent:缩进输出,可以指定缩进的空格数。
import json
# # 读取json文件
with open('travel.json', 'r', encoding='utf-8') as f:
data = json.load(f)
with open('travel.new.json', 'w', encoding='utf-8') as f:
json.dump(data, f, sort_keys=True, indent=4)
此时可以比对旧文件与新文件之间的差异,可以看到缩进关系产生了变化。
在 JSON 中存储 Python 特殊类型
如果你要在 json 中存储 python 特殊类型,例如 datetime,需要使用 json.JSONEncoder 类和 json.JSONDecoder 类来处理。
import json
from datetime import datetime
# 日期编码
class DateEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
return json.JSONEncoder.default(self, obj)
d = {'date': datetime.now()}
json_str = json.dumps(d, cls=DateEncoder)
print(json_str)
# 日期解码
class DateDecoder(json.JSONDecoder):
def __init__(self):
json.JSONDecoder.__init__(self, object_hook=self.dict_to_object)
def dict_to_object(self, d):
if 'date' in d:
d['date'] = datetime.strptime(d['date'], '%Y-%m-%d %H:%M:%S')
return d
data = json.loads(json_str, cls=DateDecoder)
print(data)
运行代码,可以得到编码和解码的输出。
{"date": "2023-01-27 21:24:46"}
{'date': datetime.datetime(2023, 1, 27, 21, 24, 46)}
对数据进行验证和清洗
JSON Schema 是一种用于验证 JSON 文档的标准,它可以用来确保 JSON 文档符合预期的格式。
jsonschema 模块需要提前安装,示例代码如下。
import json
import jsonschema
schema = {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "number"}
},
"required": ["name", "age"]
}
data = '{"name": "梦想橡皮擦", "age": 28}'
try:
jsonschema.validate(json.loads(data), schema)
print("可用的JSON")
except jsonschema.exceptions.ValidationError as e:
print(e)
当你的 json 格式正确时,会输出相应的内容,输出错误信息,测试代码可以将 "required": ["name", "age"] 修改为 "required": ["name", "age" , "sex"]。
第三方模块
在处理 JSON 格式文件时还可以使用第三方库来更方便地操作,例如 pandas。
import pandas as pd
# 读取json文件
data = pd.read_json('travel.json')
# 写入json文件
data.to_json('travel.pandas.json')
还有其他第三方库也可以用来处理 JSON 格式文件,例如:
ijson:迭代读取大型 JSON 文件。
jsonpickle:支持将 Python 对象序列化为 JSON 格式。
jsonlines:简单而高效地读取和写入文本文件中的 JSON 数据。
simplejson:提供了一种比标准库更快的 JSON 解析器和生成器。
json-tricks:支持一些高级功能,例如压缩和迭代。
来源:https://blog.csdn.net/hihell/article/details/128773039
猜你喜欢
- Python中对象的行为是由它的类型 (Type) 决定的。所谓类型就是支持某些特定的操作。数字对象在任何编程语言中都是基础元素,支持加、减
- 一、遍历函数(map)map函数用于遍历序列,对序列中每个元素进行操作,最终获取新的序列。lis=[2,3,4,5]new_list=map
- 1、表示乘号2、表示倍数,例如:def T(msg,time=1): print((msg+' ')*time)
- 这篇文章主要介绍了wxpython自定义下拉列表框过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 好多次在不同场合,都听到有同行提到“做产品比做设计更有前途”,或者“别做设计了,做产品吧”类似的观点。我不认为它们之间有什么可比性,因为这么
- 有时候发微博时候,需要裁切图片为九宫格,但是ps或者其他工具都太麻烦,这里写一个python一键切割九宫格的工具,以供大家学习和使用!实现代
- 非常不错,大家可以自己应用下。<% '//数据处理部分 dim Content,Num,I,st
- 本文实例讲述了PHP实现对图片的反色处理功能。分享给大家供大家参考,具体如下:今天有个需求用php对图片进行反色,和转灰,之前不知道可不可行
- 本文实例讲述了Python常用字符串替换函数strip、replace及sub用法。分享给大家供大家参考,具体如下:今天在做一道今年秋季招聘
- 代码如下_init_.pyfrom flask import Flask, request, url_for, redirect, rend
- 先看效果,实现一个图片左右摇动,在一般的H5宣传页,商家活动页面我们会看到这样的动画,小程序的动画效果不同于css3动画效果,是通过js来完
- 素数(也称质数),是指除了1和该数本身,不能被任何正整数整除的正整数。判断一个正整数m是否为素数,只要判断m可否被2~根号m之中的任何一个正
- 本文实例讲述了Python统计分析模块statistics用法。分享给大家供大家参考,具体如下:一 计算平均数函数mean()>>
- ltp是哈工大出品的自然语言处理工具箱, pyltp是python下对ltp(c++)的封装.在linux下我们很容易的安装pyltp, 因
- 使用Python开发的同学一定听说过Requsts库,它是一个用于发送HTTP请求的测试。如比我们用Python做基于HTTP协议的接口测试
- 我就废话不多说了,大家还是直接看代码吧~print(np.shape(X))#(1920, 45, 20)X=sequence.pad_se
- Django模板系统压根儿就没想过实现一个全功能的编程语言,所以它不允许我们在模板中执行Python的语句(还是那句话,要了解更多请参看理念
- 案例:爬取使用搜狗根据指定词条搜索到的页面数据(例如爬取词条为‘周杰伦'的页面数据)import urllib.request# 1
- 区域生长是一种串行区域分割的图像分割方法。区域生长是指从某个像素出发,按照一定的准则,逐步加入邻近像素,当满足一定的条件时,区域生长终止。区
- 本文实例讲述了python使用pil生成缩略图的方法。分享给大家供大家参考。具体分析如下:这段代码实现python通过pil生成缩略图的功能