JSON(JavaScript Object Notation,JavaScript对象表示法,读作/ˈdʒeɪsən/)是一种由道格拉斯·克罗克福特构想和设计、轻量级的资料交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。
JSON 数据格式与语言无关。即便它源自JavaScript,但目前很多编程语言都支持 JSON 格式数据的生成和解析。JSON 的官方 MIME 类型是 application/json,文件扩展名是 .json。
以上是Wikipedia中json文件的定义,我们在平时使用中可能会经常用json文件来存储一些数据的标注,并完成对标注的解析。Python中有个json模块,即可完成我们想要的一些基本功能。
json模块提供了四个功能:dumps、dump、loads、load。这四个功能名称差异不大,但功能差异较大,为此做简单记录方便下次查询。
简单而言:
- dumps:把数据转换成字符串
- dump:把数据转换成字符串并存储在文件中
- loads:把字符串转换成数据类型
- load:把文件打开从字符串转换成数据类型
1. dump/dumps
dumps/dump可以理解为一个编码的过程,其主要功能是将Python的原始数据类型转换为json字符串,核心是数据类型->字符串。
但dumps和dump又有所不同。
dumps末尾带有个s,可以理解为string,也就是说该函数是对字符串进行处理,dumps输入的Python类型,输出的是字符串,此时若想要保存到文件中,还需要用文件读写接口,将字符串写入json文件中。
dump末尾不带s,因此,其可以直接对文件进行处理,也就是其可以传入一个Python类型和一个文件处理句柄,从而一次性完成编码和写入的功能。
代码示例如下:
import json
test_dict = {'bigberg': [7600, {1: [['iPhone', 6300], ['Bike', 800], ['shirt', 300]]}]}
print(test_dict)
print(type(test_dict))
#dumps 将数据转换成字符串
json_str = json.dumps(test_dict)
print(json_str)
print(type(json_str))
with open("../config/record.json","w") as f:
json.dump(new_dict,f)
print("加载入文件完成...")
2. loads/load
loads/load可以理解为一个解码的过程,其主要功能是将json字符串转化为Python数据结构,核心是字符串->数据类型。
类比dumps和dump的关系,loads也是直接用于处理字符串,而load则可以对文件句柄进行处理。
代码示例如下:
new_dict = json.loads(json_str)
print(new_dict)
print(type(new_dict))
with open("../config/record.json",'r') as load_f:
load_dict = json.load(load_f)
print(load_dict)
load_dict['smallberg'] = [8200,{1:[['Python',81],['shirt',300]]}]
print(load_dict)
with open("../config/record.json","w") as dump_f:
json.dump(load_dict,dump_f)
参考文献
https://www.cnblogs.com/bigberg/p/6430095.html
https://www.runoob.com/python/python-json.html