IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python中json模块的使用 -> 正文阅读

[Python知识库]Python中json模块的使用

标准json

json(javascript object notation,js对象标记法),是js对象的字符串表示形式。包含两种数据结构:1.对象 ??2.数组

对象使用 { } 包裹,里面是无序的 K/V 键值对,键值之间 : 分割,键值对之间 , 分割。键只能为双引号包裹的字符串类型,值可以为4种基本数据类型(字符串型/数值型/布尔型/null)和2中引用数据类型(对象/数组),值为字符串型的时候也必须使用双引号包裹。

数组使用 [ ] 包裹, 元素之间 , 分割,元素可以为字符串型/数值型/布尔型/null/对象/数组,为字符串时也同样需要双引号包裹。

python中json模块的使用

python中的json模块主要有4个方法:dumps/ loads/ dump/ load

  • dumps:将python中对象转为符合json格式的字符串
  • loads:将符合json格式的字符串转为python对象
  • dump:将python对象转为json字符串,并写入到文件
  • load:从文件中读取json字符串并将其转为python对象

两个不带s的方法只是在带s方法的基础上多了一个json字符串与文件之间的读写的过程。

dumps

import json

obj = [{"name": "小帅", "age": 22}, [1, 1.23], (True, False), None]
res = json.dumps(obj)
print("值:{0}\n类型:{1}".format(res, type(res)))

在这里插入图片描述
dumps方法的参数列表:
在这里插入图片描述
obj:要转成json字符串的python对象
*:无意义,表示后面的参数传递时必须指定参数名传递
ensure_ascii:等于True时会对obj中所有非ascii码字符转义成对应的unicode字符,所以上面的中文变成了类似 “\u5c0f\u5e051” 这种格式,设为False时原样保存

loads

import json

json_str = '[{"name": "小帅", "age": 22}, [1, 1.23], true, false, null, "2022-05-10"]'
res = json.loads(json_str)
print("值:{0}\n类型:{1}".format(res, type(res)))

在这里插入图片描述
loads方法的参数列表:
在这里插入图片描述

dump/load

和上面各自对应的方法功能参数都类似,只是多了个文件操作,从文件读,写入到文件。

使用dump序列化python对象到文件:

import json

obj = [{"name": "小帅", "age": 22}, [1, 1.23], (True, False), None]
with open("test.json", "a", encoding="utf-8") as f:
    json.dump(obj, f)

在这里插入图片描述
使用load从文件反序列化到python对象:

import json

with open("test.json", "r", encoding="utf-8") as f:
    res = json.load(f)
    print("值:{0}\n类型:{1}".format(res, type(res)))

在这里插入图片描述

dumps序列化时间日期时报错

dumps在对python中的日期时间数据类型转化为字符串的时候会报错:

import json
from datetime import date

today = date.today()
obj = [today]
res = json.dumps(obj)
print("值:{0}\n类型:{1}".format(res, type(res)))

在这里插入图片描述
stackoverflow上找到了2种解决方法:
1.调用dumps的时候将内置函数str赋值给default参数。json.dumps(obj, default=str)
2. 第二种是新写一个新类NewEncoder继承JSONEncoder类,重写里面的default方法,并在调用dumps的时候通过cls参数指定新类。json.dumps(obj, cls=NewEncoder)
下面的官方文档给出了怎么拓展JSONEncoder类:
在这里插入图片描述

class NewEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(obj, datetime.date):
            return obj.strftime('%Y-%m-%d')
        else:
            return json.JSONEncoder.default(self, obj)

json与python数据类型对照

截自源码
在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-05-12 16:26:21  更:2022-05-12 16:26:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 13:35:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码