python3 json的常用操作
既然是基本操作 ,在这里我便开门见山
什么是json呢?json,即JavaScript Object Notation, 是一种轻量级的数据交换格式。python3中常用json模块对json数据进行解析。
json这个模块包含了两个函数:
json.dumps():对数据进行编码;
json.loads(): 对数据进行解码;
在json的编解码过程中,python 的原始类型与json类型会相互转换.
如python中的dict会编码成json的object:
import json
data = {
"a":1
"b":2
}
json_data = json.dumps(data)
print(data)
print(json_data)
返回的结果如下:
{'a': 1, 'b': 2}
{"a": 1, "b": 2}
你会发现两者非常相似。
我们在反过来对其进行解码
str_data = json.loads(json_data)
str_data['a']
str_data['b']
返回的结果如下:
1
2
##常见的python类型转化为json类型如下表:
dict -> object
list,tuple -> array
str -> string
int, float, int- & float-derived Enums -> number
True -> true
False -> false
None -> null
json转化python,则相反。
但是,当我们要处理的是文件,而不是字符串时,就要用到json.dump()和json.load()
写入json数据:
with open('test.json', 'w') as f:
json.dump(test, f)
读取json数据:
with open('data.json', 'r') as f:
json.load(f)
那么dumps和dump有什么区别呢?
###dumps和dump都是一种序列化方法,dumps只完成了序列化为str,dump必须传文件描述符,将序列化的str保存到文件中
dumps可以格式化所有的基本数据类型为字符串:
import json
json.dumps(1)
json.dumps([])
json.dumps({})
返回的结果如下:
‘1’
‘[]’
‘{}’
import json
test_data = {'a':1, 'b':2}
with open(r"E:\test\test.json","w",encoding = "utf-8") as f:
json.dump(test_data,f,indent = 5)
返回的结果如下:
{
"a": 1,
"b": 2
}
其中的indent默认为0,若小于0,也默认为0.
###loads和load 是一种反序列化方法 loads 只完成了反序列化,load 只接收文件描述符,完成了读取文件和反序列化
test_data2 = '{"a":1, "b":2}
json.loads(test_data2)
{‘a’: 1, ‘b’: 2}
import json
with open("test.json", "r", encoding = 'utf-8') as f:
data = json.load(f,strict=False)
print(data)
{‘a’: 1, ‘b’: 2}
####另外,在读取json文件时,直接使用文件名即可,若加路径,则会报错。
pickle模块也可以读取python,json模块和picle模块都有 dumps、dump、loads、load四种方法,而且用法一样。
不用的是json模块序列化出来的是通用格式,其它编程语言都认识,就是普通的字符串,
而pickle模块序列化出来的只有python可以认识,其他编程语言不认识的,表现为乱码
不过pickle可以序列化函数,但是其他文件想用该函数,在该文件中需要有该文件的定义(定义和参数必须相同,内容可以不同.