数据存储之python下JSON的保存和读取(一)
JSON字符串的含义
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。更多解释请见:https://baike.baidu.com/item/JSON/2462549?fr=aladdinJSON
支持数据格式:
对象(字典):使用花括号。
数组(列表):使用方括号。
字符串类型:字符串必须要用双引号,不能用单引号)。
整形
浮点型
布尔类型
null类型。
总之,json是字符串的一种书写格式,它还是一个字符串。
编码和解码
由python格式数据类型 ----> json字符串 = 编码
由json字符串 ----> python格式数据类型 =解码
编码
dumps 和dump
dump区别于dumps的地方在于,dump可传入文件句柄。
当你的python格式数据中包含中文字符串时,注意使用ensure_ascii参数,因为dumps默认是以ascii编码方式进行的
#1.dumps,将python类型转换为json格式字符串
json_str = json.dumps(data_dict)
print(json_str)#[{"book": "\u7f57\u5bbe\u900a\u6e38\u8bb0", "\u4ef7\u683c": 15.5, "\u6709\u8d27": false}, {"book": "\u4e09\u56fd\u6f14\u4e49", "\u4ef7\u683c": 19, "\u6709\u8d27": true}, {"book": "\u632a\u5a01\u7684\u68ee\u6797", "\u4ef7\u683c": 23, "\u6709\u8d27": true}]
#上面可以看得出来,中文存在问题,因为编码时,默认是以ascii码的编码方式进行的,解决的办法也很简单,就是ensure_ascii参数
json_chinese_str = json.dumps(data_dict,ensure_ascii=False)
print(json_chinese_str)
#2.dump,区别于dumps ,dump可传入一个f句柄对象
f = open("json.json","w",encoding="utf-8")
json.dump(data_dict,f,ensure_ascii=False)
f.close()
解码
load和loads,两者的区别依然是load传入的是文件句柄,loads传入的是json串。
#3.loads 将json字符串解码成python格式
str = '[{"book": "罗宾逊游记", "价格": 15.5, "有货": false}, {"book": "三国演义", "价格": 19, "有货": true}, {"book": "挪威的森林", "价格": 23, "有货": true}]'
json_list = json.loads(str,encoding="utf-8")
print(json_list)
#4.load
f = open('json.json',"r",encoding="utf-8")
json_list = json.load(f)
f.close()
print("sda",json_list)
网友评论