首页 > 代码库 > json 和 pickle
json 和 pickle
json 和 pickle
用于序列化的两个模块
json,用于字符串 和 python数据类型间进行转换
pickle,用于python特有的类型 和 python的数据类型间进行转换
json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
json dumps把数据类型转换成字符串
dump把数据类型转换成字符串并存储在文件中
loads把字符串转换成数据类型
load把文件打开从字符串转换成数据类型
可以看到直接对文件的操作都是不带“s” 的dump和load,直接对内存操作的都是带“s”的。
pickle同理
现在有个场景在不同设备之间进行数据交换很low的方式就是传文件,dumps可以直接把服务器A中内存的东西发给其他服务器,比如B服务器、
在很多场景下如果用pickle的话那A的和B的程序都的是python程序这个是不现实的,很多时候都是不同的程序之间的内存交换怎么办?就用到了json
并且json能dump的结果更可读,那么有人就问了,那还用pickle做什么不直接用json,是这样的,json只能把常用的数据类型序列化(列表、字典、列表、字符串、数字),像日期格式、类对象 json就不行了,只有用pickle。
为什么他不能序列化上面的东西呢?因为json是跨语言的!
我们看个json的小例子:
import requests
import json
response = requests.get(‘http://wthrcdn.etouch.cn/weather_mini?city=北京‘)
response.encoding = ‘utf-8‘
dic = json.loads(response.text)
print(type(dic))
print(dic)
print(dic[‘data‘][‘city‘])
输出截图:
这是数据在内存时的处理,我们在看一个数据在文件的处理:
数据在文件内的存储格式:
[
{"title": ["java\u722c\u866b\u6293\u53d6qq\u7fa4\u6570\u636e"], "reply": ["4"], "author": ["zzy64421"]},
{"title": ["\u6709\u5927\u795e\u6709P2P\u7684\u6570\u636e\u5417"], "reply": ["1"], "author": ["\u6709\u70b9\u5c0f\u538c\u4e16"]},
{"title": ["\u60f3\u722c\u8d76\u96c6\u7f51\uff0c\u8bbf\u95ee\u592a\u5feb\u8981\u8f93\u9a8c\u8bc1\u7801\uff0c\u600e\u4e48\u7834"], "reply": ["7"], "author": ["\u94c1\u8840\u591c\u5e1d"]},
{"title": ["30\u5143\u6c42\u5199\u4e00\u7f51\u9875\u722c\u866b"], "reply": ["4"], "author": ["C\u8c6ay"]},
{"title": ["\u767e\u5ea6\u8d34\u5427\u4e2d\u7684\u697c\u5c42\u56de\u590d\u600e\u4e48\u83b7\u53d6\u5462"], "reply": ["21"], "author": ["\u5c0f\u50bb\u86cb\u5a03\u5a03"]},
{"title": ["\u6c42\u52a9\u7f8e\u56e2\u5916\u5356\u7684\u722c\u866b\u6570\u636e"], "reply": ["0"], "author": ["\u5de6\u4ed3\u871c\u67d1"]},
{"title": ["\u6709\u6ca1\u6709\u9700\u8981\u5e2e\u5fd9\u722c\u53d6\u6570\u636e\u7684\uff1f\u6216\u8005\u505a\u722c\u866b\u7c7b\u8bfe\u9898\u7684\uff1f\u57fa\u4e8eJAVA"], "reply": ["51"], "author": ["fhg1225"]},
{"title": ["\u6c42\u53ef\u4ee5\u722c58\u540c\u57ce\uff0c\u8d76\u96c6\u7f51\u6570\u636e\u7684\u722c\u866b\u3002"], "reply": ["9"], "author": ["200901491"]},
{"title": ["\u6709\u722c\u866b\u8f6f\u4ef6\u53ef\u4ee5\u91c7\u96c6\u5fae\u535a\u3001\u8d34\u5427\u3001\u77e5\u4e4e\u7684\u4e48\uff1f"], "reply": ["3"], "author": ["\u738b\u9053\u653b\u7565"]}
]
整体来看这是个列表,列表内每个元素都是个字典。
import json
f = open(‘items.json‘)
a = json.load(f)
print(type(a))
print(a[0])
print(a[0][‘author‘])
f.close()
输出结果:
通过这两个例子我们看到了json的用法,也能体会出load和loads的区别了。
【注】字符串内部必须使用双引号如:"reply": ["3"],不能写成:‘reply‘: [‘3‘].
因为json是跨语言的,其他语言是使用双引号表示字符串的,所以在python中一定注意这一点
null
json 和 pickle
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。