json 和 pickel 详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json 和 pickel 详解相关的知识,希望对你有一定的参考价值。
一、json
json,用于字符串 和 python数据类型间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
1、json.loads()用于将字符串形式的字典,列表转换成相应的字典,列表(元祖不可以,应为其他语言中没用元祖)
import json a="[1,2,3,4]" b=‘{"k1":1,"k2":2}‘#当字符串为字典时{}外面必须是‘‘单引号{}里面必须是""双引号 print(json.loads(a)) print(json.loads(b)) [1, 2, 3, 4] {‘k2‘: 2, ‘k1‘: 1}
2、json.dumps() 用于将列表,字典,元祖转换成字符串。其中元祖转变成字符串为列表形式
python中的字符串分普通字符串和unicode字符串,一般从数据库中读取的字符串会自动被转换为unicode字符串
import json a = [1,2,3,4] b ={"k1":1,"k2":2} c = (1,2,3,4) print(json.dumps(a)) print(json.dumps(b)) print(json.dumps(c))
可以看到这里输出的字符串为普通字符串,但是里面的内容却是unicode字符串的内容
要想得到字符串的真实表示,需要用到参数ensure_ascii=False(默认为True):
import json b = {"name":"我"} print(json.dumps(b,ensure_ascii=False)) {"name": "我"}
3、 json.dump()把一个字典或列表以字符串的形式写到文件中
import json a = [1,2,3,4] json.dump(a,open("texe.py","w"))
4、json.load() 把在文件中以列表、字典形式保存的字符串元素读出来
import json a = [1,2,3,4,1] ap = json.load(open("texe.py")) print(ap)
二、pickle
pickle 用于【特殊的字节类型】 和 【python数据类型】间进行转换
pickle 模块提供了四个功能:dumps、dump、loads、load
1、pickle.dumps() 用于将python中特有的数据类型转换成特殊的字节类型
import pickle a = [1,2,3,4] f = pickle.dumps(a) print(f) print(type(f)) h = json.dumps(a) b‘\x80\x03]q\x00(K\x01K\x02K\x03K\x04e.‘ <class ‘bytes‘>
2、 pickle.loads()用于将特殊字节类型转换成python特有的数据类型
import pickle a = [1,2,3,4] f = pickle.dumps(a) print(f) print(type(f)) print(pickle.loads(f)) b‘\x80\x03]q\x00(K\x01K\x02K\x03K\x04e.‘ <class ‘bytes‘> [1, 2, 3, 4]
3、 pickle.dump()把python中特有的数据类型以特殊字节的形式写到文件中(其中文件都是以字节方式打开)
import pickle a = [1,2,3,4] pickle.dump(a,open("aaa.py","wb"))
4、json.load() 把在文件中以特殊字节保存的数据读出来
import pickle ret = [1,2,3,4] pickle.dump(ret,open("aaa.py","wb")) p = pickle.load(open("aaa.py","rb")) print(p)
===================总结=============================
json 1、用于多语言间的相互转换
2、无论是否写到文件中,json都是列表、字典、元祖和字符串之间的相互转换
pickle 1、只适用于python
2、无论是否写到文件中,pickle都是用于python中所有数据类型和只有python才能解析的特殊字节间的相互转换
3、如果涉及到写到文件中,打开方式必须是以字节方式打开
以上是关于json 和 pickel 详解的主要内容,如果未能解决你的问题,请参考以下文章
python PICKEL:处理(保存,加载)Python对象
错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”