JSON (JavaScript Object Notation)是一个受 JavaScript 的对象字面量语法启发的轻量级数据交换格式,本文介绍Python json库的使用,也就是json的序列化和反序列化方法。
json序列化
dump
写入到文件,将对象转换为json字符串格式,这样更容易存储。
1 | import json |
dumps
将对象转换为string,这样更容易传输
1 | data2 = {'Numbers':1, 'Strings':"value", 'Arrays':[1,2,3]} |
执行结果:1
2
3
4
5
6
7
8
9
10{
"Arrays": [
1,
2,
3
],
"Numbers": 1,
"Strings": "value"
}
<class 'str'>
将类实例转化成json字符串
也可以将类实例转化成json字符串,需要先将实例转化为可序列化操作的对象。下面介绍3种方案:
- 获取实例的
__dict__
成员变量 - 使用Python内置函数
vars()
获取__dict__
- 类继承JSONEncoder,自定义JSONEncoder.default()函数
1 | class JsonClassSerializable(json.JSONEncoder): |
执行结果:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17{'name': 'zhangsan', 'height': 175}
{
"height": 175,
"name": "zhangsan"
}
{
"height": 175,
"name": "zhangsan"
}
{
"height": 175,
"name": "zhangsan"
}
{
"height": 175,
"name": "zhangsan"
}
json反序列化
json反序列化是将json数据或者字符串转化为Python对象,对应load和loads两个方法:
- load:针对文件句柄,用于读取文件
- loads:针对内存对象,将string转换为对象
load
1 | with open("data1.json", "r", encoding="utf-8") as f: |
执行结果:1
2
3{'Arrays': [1, 2, 3], 'Numbers': 1, 'Objects': {'1': 1, '2': 2}, 'Strings': 'value'}
<class 'dict'>
<class 'list'>
loads
1 | datas = '{"Numbers":1, "Strings":"value", "Arrays":[1,2,3]}' |
执行结果:1
2{'Numbers': 1, 'Strings': 'value', 'Arrays': [1, 2, 3]}
<class 'dict'>
JSON反序列化类对象
1 | class Person(): |
执行结果:1
2
3
4<__main__.Person object at 0x000001FA98439748>
zhangsan
175
My name is zhangsan
文档
本文标题:Python json文件读写
文章作者:hiyo
文章链接:https://hiyongz.github.io/posts/python-library-for-json/
许可协议:本博客文章除特别声明外,均采用CC BY-NC-ND 4.0 许可协议。转载请保留原文链接及作者。