目录

Python-json模块

一、相关概念

序列号 和反序列号

序列号:把内存中的数据类型转成一种特定格式,这种格式(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)
本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
muyouking1112 分钟前
0.深入探秘 Rust Web 框架 Axum
开发语言·前端·rust
勇敢牛牛_12 分钟前
【Rust基础】使用Rocket构建基于SSE的流式回复
开发语言·后端·rust
season_zhu18 分钟前
iOS开发:关于URL解析
ios·json·swift
lixy57928 分钟前
深度学习之自动微分
人工智能·python·深度学习
斯普信专业组33 分钟前
从原理到实践:NFS复杂故障处理方法论
开发语言·nfs
一一Null38 分钟前
Access Token 和 Refresh Token 的双令牌机制,维持登陆状态
android·python·安全·flask
钢铁男儿1 小时前
Python 文本和字节序列(处理文本文件)
开发语言·python
三劫散仙1 小时前
pycharm无法识别到本地python的conda环境解决方法
python·pycharm·conda
加点油。。。。2 小时前
Matlab绘图(三)——设置图例的位置
开发语言·matlab·绘图
硬匠的博客2 小时前
C/C++指针
c语言·开发语言·c++