目录
Python读写json文件
pickle能对任意Python对象进行二进制序列化与反序列化。
json主要对特定Python对象(字典dict)进行文本(字符串)序列化与反序列化。
json是什么格式
json是字符串,里面的内容由键key和值value成对组成,与字典相似。
json字符串内只能使用双引号"",不能使用单引号。
手动编写一个json字符串,开始如下
ajson='{"name":"zhangsan","age":18}'
形式上就是字典dict变成了字符串(字典里面使用的是双引号,最外层单引号表示整体是字符串)。
经常见到文件形式的json,格式化之后表现如下(文本文件mydata.json)。
{
"name": "zhangsan",
"comp": ["comp1","comp2","comp3"],
"age": 18
}
json(JSON)表示的对象就是标准的JavaScript语言的对象。下表,是python数据类型和json数据类型之间的映射关系。
python | json |
---|---|
dict | {}, object |
list, tuple | [], array |
str | string |
int, float | number |
True | true |
False | false |
None | null |
json模块的读写主要方法
Python标准库中json模块提供了非常完善的Python对象到JSON格式的转换。
- json序列化(生成json字符串):json.dumps()
- json反序列化(读取json字符串):json.loads()
- json序列化(写入文件):json.dump()
- json反序列化(读取文件):json.load()
这里容易忘记序列化的意思,记住一点,序列化是为了方便存储,比如序列化dumps()成字符串json。
Python读取json
把json字符串转换为Python字典dict对象(反序列化,读取json)
import json
ajson='{"name":"zhangsan","age":18}'
avar=json.loads(ajson)
print(type(avar)) # <class 'dict'>
print(avar) # {'name': 'zhangsan', 'age': 18}
Python写入json
把json字符串转换为Python字典dict对象(序列化,生成json)
import json
adict={"name":"zhangsan","age":18}
avar=json.dumps(adict)
print(type(avar)) # <class 'str'>
print(avar) # {"name": "zhangsan", "age": 18}
Python在文件中写入json
将json字符串序列化到文件中。下面在工程中创建脚本文件t09.py,内容如下
将Python对象"adict"序列化到文件“ajfile”中
import json
adict={"name":"zhangsan","age":18}
with open("ajfile","w") as f: # 注意,这里是文本文件的操作,是字符串
json.dump(adict,f)
程序运行之后,工程目录中会生成一个二进制文件“ajfile”,用记事本打开,里面是文本。
文本内容如下。
{"name": "zhangsan", "age": 18}
Python从文件中读取json
在工程中创建脚本文件t10.py,编写反序列化程序,内容如下
import json
with open("ajfile","r") as f:
avar = json.load(f)
print(type(avar)) # <class 'dict'>
print(avar) # {'name': 'zhangsan', 'age': 18}
json格式与字典dict的关系
json(JSON)是JavaScript语言中的对象,dict是Python语言中的对象。它们之间存在很多区别,但是不需要刻意比较。
使用时只需要记住,json是字符串,里面是双引号,形式与字典dict键值对一样,它们之间可以相互转换。
有一点需要注意,dict字典里嵌套元组tuple,而在json字符串中就是数组。