Python中JSON模块的基本使用方法:dump、load、dumps、loads详解
[id_78393175]id_1600500212]

Python 内置有 json 模块,无需额外安装便可进行导入并运行。
json 模块的主要功能在于能够从文件中读取序列化数据,同时也能够将序列化数据存入文件。
四个函数
json 模块的操作使用起来相对比较简单。这个模块仅有四个方法,分别是 dump()、load()、dumps()、loads()。
函数功能
json.dumps()
要将 Python 对象编码成 Json 字符串,需要借助文件操作并将其写入文件。
json.loads()
将Json字符串解码成python对象,需要先打开文件
json.dump()
将python中的对象转化成json并且储存到文件中
json.load()
将文件中的json的格式转化成python对象提取出来
四个函数的范例
import json
使用 dict 字典进行测试。
data_dict = { "strength": "10",
"knowledge": "12",
"speed": "6",
"member":['蛋','糖','杏仁','马卡龙']}
def json_dumps_test():
print('dumps测试运行中')
json_str = json.dumps(data_dict,ensure_ascii=False)
print(json_str)
with open('./json_test.json','w',encoding='utf-8') as file:
file.write(json_str)
def json_dump_test():
print('dump测试运行中')
with open('./json_test.json','w',encoding='utf-8') as file:
json.dump(data_dict,file,ensure_ascii=False)
def json_loads_test():
print('loads测试运行中')
with open('./json_test.json','r',encoding='utf-8') as file:
dict = file.read()
print(type(dict))
print(dict)#str类型
dict = json.loads(dict)
print(type(dict))
print(dict)#dict类型
def json_load_test():
print('load测试运行中')
with open('./json_test.json','r',encoding='utf-8') as file:
dict = json.load(file)
print(type(dict))
print(dict)#dict类型
if __name__ == '__main__':
#json_dumps_test()
#json_dump_test()
#json_loads_test()
#json_load_test()
pass
使用 json.dumps 函数可以将字典等需要保存的数据类型转换为字符串。
1.open 一个文件获得file文件流
使用 json.dumps 函数将 data_dict 转换为符合 json 规则的字符串。
3.写入文件
对数据进行编码,形成json格式的字符串,再写入文件。
范例
import json
if __name__ == '__main__':
data_dict = {"key2": "value2", "key1": "value", "key3": "value3"}
默认转换的 json 数据是没有顺序的。倘若把参数 sort_keys 改成 True 。
# 则会根据key值将数据进行排序。
json1 = json.dumps(data_dict, sort_keys=True)
# 默认无序
json2 = json.dumps(data_dict)
print(json1)
print(json2)
输出包含三个键值对的内容,其中一个键为"key1",对应的值为"value";另一个键为"key2",对应的值为"value2";还有一个键为"key3",对应的值为"value3"。
输出包含"key2"对应"value2"、"key1"对应"value"、"key3"对应"value3"的内容。
但是还要将其写入文件
# 打开文件 在文件里写入转成的json串
with open('test.json', 'w', encoding='utf-8') as f:
f.write(json1)
dumps的一些参数(写在这里用作查询),dump类似
dumps 编码后的 json 格式输出较为紧凑,若不止一行,看起来就不是特别美观,如同一堆乱码。因此,推出了一些可选参数,以使 json 码的可读性更高。当然,不用这些参数也无妨。
函数:
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
obj:要转化成json的对象字典,列表,字符等
sort_keys = True 意味着告知编码器按照字典排序(从 a 到 z)来进行输出。倘若遇到字典类型的 Python 对象,那么就会将其关键字按照字典排序的方式进行处理。
以下是写入到文件后的形式。
{"name": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}
{"age": 19, "city": "\u56db\u5ddd", "name": "\u4f60\u731c"}
indent:参数根据数据格式缩进显示,读起来更加清晰。
{"name": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}
{
"name": "\u4f60\u731c",
"age": 19,
"city": "\u56db\u5ddd"
}
分隔符指的是 separators,其参数含义为不同 dict 项之间的分隔符以及 dict 项内 key 和 value 之间的分隔符,并且把:和,后面的空格都去除掉了。
{"name": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}
{"name":"\u4f60\u731c","age":19,"city":"\u56db\u5ddd"}
skipkeys的默认值为 False。当 dict 的 keys 内的数据不是 python 的基本类型(str、unicode、int、long、float、bool、None)时,如果设置为 False,就会报 TypeError 的错误。而此时将其设置为 True,就会跳过这类 key。
ERROR: keys must be str, int, float, bool or None, not tuple
["你初", "年龄为 19", "所在城市为四川"]
默认输出 ASCII 码,这是因为 ensure_ascii=True。若将其改为 False,那么就能够输出中文。
{"name": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}
{"name": "你猜", "age": 19, "city": "四川"}
如果 check_circular 为 false,那么就会跳过对容器类型的循环引用检查。因为循环引用会导致溢出错误(或更糟的情况)。
如果 allow_nan 为假,那么 ValueError 会序列化超出范围的浮点值,比如 nan、inf、-inf,并且会严格遵守 JSON 规范,不会使用像 JavaScript 中的 nan、Infinity、-Infinity 这样的值。
default 是一个函数,它的作用是返回一个可序列化的 obj 版本或者引发类型错误。默认情况下,它只会引发类型错误。
json.dump 这个函数有两个主要参数,一个是需要保存的数据类型 data_dict,另一个是文件流类型 file
步骤1.open 一个文件获得file文件流
使用 json.dump 这个函数,将 data_dict 写入到 file 这个文件中,以将数据写入 json 文件。
这个方法进行了文件的操作,然后将转换后的 json 储存到了文件之中。
函数原型
dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw)
范例
import json
data_dict = {"key2": "value2", "key1": "value", "key3": "value3"}
#讲python编码成json放在那个文件里
filename = 'data.json'#'pi_x.txt'txt也可以
with open (filename,'w') as f:
json.dump(x,f)
或者
import json
data_dict = {"key2": "value2", "key1": "value", "key3": "value3"}
json.dump(data_dict, open('data.json', 'w'), sort_keys=True, indent=4, separators=(',', ': '))
参数和 dumps 大致相同,只是多了一个 fp ,这个 fp 是用来直接对文件进行操作的。
json.loads (str)
步骤1.open 一个文件获得file文件流
步骤2.读取文件内容为字符串
使用 json.loads 这个函数,将给定的字符串转换成与之对应的数据格式。
函数原型
def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
将“s”(一个包含 JSON 的“str”实例)进行反序列化。
将文档转换为一个 Python 对象。
范例
import json
f = open('data.json', encoding='utf-8')
content = f.read() # 使用loads()方法需要先读文件
python_obj = json.loads(content)
print(python_obj)
json.load(file)
1.open 一个文件获得file文件流
使用 json.load 函数来对文件进行操作,将其转换成对应的数据格式。
函数原型
def load(fp, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
将 ``fp`` 进行反序列化(`fp` 是一个支持 `.read()` 方法的类似文件的对象,其中包含)
将一个 JSON 文档转换为一个 Python 对象。
范例
import json
python_obj = json.load(open('data.json','r'))
print(python_obj)
print(type(python_obj))
Python 中的数据类型与 JSON 中的数据类型存在对应关系。Python 有多种数据类型,如整数、浮点数、字符串、列表、字典等。JSON 也有相应的数据类型,整数对应 JSON 中的 number 类型,浮点数对应 JSON 中的 number 类型,字符串对应 JSON 中的 string 类型,列表对应 JSON 中的 array 类型,字典对应 JSON 中的 object 类型。
dict
object
list,tuple
array
str,unicode
string
int,long,float
number
True
true
False
false
None
null
import json
import os
#更新于2024/04/09
#详细查看CSDN
'''测试用dict字典'''
data_dict = { "strength": "10",
"knowledge": "12",
"speed": "6",
"member":['蛋','糖','杏仁','马卡龙']}
#json.jumps(obj,其他可选参数)->str
将目标参数转换成 Json 格式的字符串,并且需要再通过文件操作将其写入文件。
def Self_json_jumps():
json_str = json.dumps(data_dict,ensure_ascii=False)
with open('./json_test.json','w',encoding='utf-8') as file:
file.write(json_str)
#json.jump(obj, fp,其他可选参数)
将目标参数直接转换为 json 格式文件,此过程不需要再通过文件操作来写入文件,不过需要传递一个文件参数。
def Self_json_dump(path = './json_test.json'):
if(os.path.exists(path)):
print("文件路径存在")
if(os.path.isfile(path)):
print("该路径为文件")
with open(path,'w',encoding='utf-8') as file:
json.dump(data_dict,file,ensure_ascii=False)
将字符串 str 转换为字典(dict)、列表(list)等数据结构,使用了 json.loads 函数。
#将Json格式的string转换为对应的字典,列表等
需要打开文件以读取其中的字符串,然后将这些字符串转为对应的 Python 数据类型。
def Self_json_loads():
with open('./json_test.json','r',encoding='utf-8') as file:
dict_str = file.read()
dict0 = json.loads(dict)
#json.load(fp,其他可选参数)
#读取json文件,转换为对应的python类型
def Self_json_load():
with open('./json_test.json','r',encoding='utf-8') as file:
dict = json.load(file)
if __name__ == '__main__':
#print(dir(json))
help(json.load)
pass