Python-json模块

目录

一、相关概念

二、json模块

1、序列化

(1)第一种方式

 (2)第二种方式

2、 反序列化

(1)第一种方式

 (2)第二种方式

三、pickle模块


一、相关概念

# 序列号 和反序列号
# 序列号:把内存中的数据类型转成一种特定格式,这种格式(json/pickle)可以用于存储,或者传输给其他平台
import json

# 内存中是数据类型 ----> 序列化 ----> 特定格式(json/pickle)
# 内存中是数据类型 <---- 反序列化 <---- 特定格式(json/pickle)

# 用途:
# 1) 保存程序运行状态(存档)
# 2)跨平台数据交互(只能交互共有的数据类型),例:Java --- Python,只能用json,pickle是Python专用格式

二、json模块

json 是一种通用格式,只能序列化所有编程语言都支持的数据类型;

1、序列化

(1)第一种方式

dic = {'name': '李元芳', 'age': 27, 'salary': 30, 'married': False, 'hobbies': '大人此事必有蹊跷'}
json_res = json.dumps(dic)
json_res1 = json.dumps(dic,ensure_ascii=False) # 确保所有字符能够用ASCII码表示
with open('data/test.json',mode='wt',encoding='utf-8') as f:
    f.write(json_res)

print(json_res, type(json_res))
print(json_res1, type(json_res1))

运行结果:

{"name": "\u674e\u5143\u82b3", "age": 27, "salary": 30, "married": false, "hobbies": "\u5927\u4eba\u6b64\u4e8b\u5fc5\u6709\u8e4a\u8df7"} <class 'str'>
{"name": "李元芳", "age": 27, "salary": 30, "married": false, "hobbies": "大人此事必有蹊跷"} <class 'str'>
 

{"name": "\u674e\u5143\u82b3";双引号是所有编程语言通用的语法,汉字编程unicode格式二进制,这个可以控制

 (2)第二种方式

dic = {'name': '李元芳', 'age': 27, 'salary': 30, 'married': False, 'hobbies': '大人此事必有蹊跷'}
with open('data/test.json', mode='wt', encoding='utf-8') as f:
    json.dump(dic, f,ensure_ascii= False)  # 将序列化对象传给 f

2、 反序列化

(1)第一种方式

dic = json.loads('{"name": "李元芳", "age": 27, "salary": 30, "married": false, "hobbies": "大人此事必有蹊跷"}')
print(dic, type(dic))
# 从json文件中取值
with open('data/test.json',mode='rt',encoding='utf-8') as f:
    json_res = f.read()
dic = json.loads(json_res)
print(dic, type(dic))

运行结果:

{'name': '李元芳', 'age': 27, 'salary': 30, 'married': False, 'hobbies': '大人此事必有蹊跷'} <class 'dict'>

 (2)第二种方式

with open('data/test.json',mode='rt',encoding='utf-8') as f:
    json_res = json.load(f)
print(json_res)

注:

json.dumps({1,2,3})

TypeError: Object of type set is not JSON serializable


三、pickle模块

dic = {
    'name': '李元芳',
    'age': 27,
    'salary': 30,
    'married': False,
    'hobbies': ['大人此事必有蹊跷', '如燕', '果然不出大人所料'],
    's': {1, 2, 3, 4, 5, 7}
}
pickle_res = pickle.dumps(dic)
print(pickle_res,type(pickle_res))

运行结果:

b'\x80\x04\x95\x97\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\t\xe6\x9d\x8e\xe5\x85\x83\xe8\x8a\xb3\x94\x8c\x03age\x94K\x1b\x8c\x06salary\x94K\x1e\x8c\x07married\x94\x89\x8c\x07hobbies\x94]\x94(\x8c\x18\xe5\xa4\xa7\xe4\xba\xba\xe6\xad\xa4\xe4\xba\x8b\xe5\xbf\x85\xe6\x9c\x89\xe8\xb9\x8a\xe8\xb7\xb7\x94\x8c\x06\xe5\xa6\x82\xe7\x87\x95\x94\x8c\x18\xe6\x9e\x9c\xe7\x84\xb6\xe4\xb8\x8d\xe5\x87\xba\xe5\xa4\xa7\xe4\xba\xba\xe6\x89\x80\xe6\x96\x99\x94e\x8c\x01s\x94\x8f\x94(K\x01K\x02K\x03K\x04K\x05K\x07\x90u.' <class 'bytes'>

pickle_res = pickle.dumps(dic,protocol=0)  # 防止乱码

with open('data/test.picle',mode='wb') as f:
    f.write(pickle_res)

 运行结果:

with open('data/test1.picle',mode='wb') as f:
    pickle.dump(dic,f,protocol=0)
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值