json模块和pickle模块

这篇具有很好参考价值的文章主要介绍了json模块和pickle模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

json模块和pickle模块

欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起探讨和分享Linux C/C++/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。



专栏:《python从入门到实战》


json模块

json用于不同语言之间的数据交换,比如C和Python之间等等,即可跨语言。而pickle只能用于python与python之间数据交换。

序列化与反序列化

我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。
JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:
json模块和pickle模块

在文件中写入读取数据-字典

dic ={‘string1’:’hello’}#写文件只能写入字符串 - 手动把字典变成字符串
f = open(‘hello’, ‘w’)
f.write(dic)
f_read = open(‘hello’, ‘r’)
data = f_read.read() #从文件中读出的都是字符串
data = eval(data) #提取出字符串中的字典
print(data[‘name’])

json实现上述功能 - json可以在任意语言中传送数据

dic = {‘string1’:’hello’}
data = json.dumps(dic)
print(data)
print(type(data)) #dumps()会把我们的变量变成一个json字符串
f = open(“new_hello”, “w”)
f.write(data)

json字符串和我们手动加 ’’ 变成的字符串是有区别的,它遵循json字符串规范,即字符串用双引号引起来。
dumps会把我们传入的任何数据类型变成双引号引起来的字符串

# {‘string1’:’hello’} ---> “{“string1”:”hello”}”
# 8 ---> “8”
# ‘hello’ ---> ““hello”” – 被json包装后的数据内部只能有双引号
#[1, 2] ---> “[1, 2]”

我们在存储或传输的时候把数据转换成json字符串,可以实现任何语言通用

f_read = open(“new_hello”, “r”)
data = json.loads(f_read.read()) #这个data直接就是字典类型
print(data)
print(type(data))

json模块中的方法

json.dumps() # 把数据包装成json字符串 – 序列化
json.loads() # 从json字符串中提取出原来的数据 – 反序列化

我们在python中将一个列表 l = [1, 2, 3] 包装成一个json字符串并存储或发送出去,假如我们在C语言中使用json解析,就会得到C语言中对应的数据结构,提取出来就是一个数组buf[3] = {1, 2, 3}。
并不是说dumps和loads必须要一块用,只要是符合json规范的json字符串都可以用loads处理提取数据结构,和用不用dumps没关系。

json.dump(data, f) #转换成json字符串并写入文件
#相当于 data = json.dumps(dic) + f.write(data)
data = json.load(f) #先读取文件,再提取出数据
#相当于data = json.loads(f_read.read())

示例:

#----------------------------序列化
import json
 
dic={'name':'alvin','age':23,'sex':'male'}
print(type(dic))#<class 'dict'>
 
j=json.dumps(dic)
print(type(j))#<class 'str'>

f=open('序列化对象','w')
f.write(j)  #-------------------等价于json.dump(dic,f)
f.close()
#-----------------------------反序列化<br>
import json
f=open('序列化对象')
data=json.loads(f.read())#  等价于data=json.load(f)

注意:

import json
#dct="{'1':111}"#json 不认单引号
#dct=str({"1":111})#报错,因为生成的数据还是单引号:{'one': 1}

dct='{"1":"111"}'
print(json.loads(dct))

无论数据是怎样创建的,只要满足json格式,就可以json.loads出来,不一定非要dumps的数据才能loads。

pickle模块

Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据,不能成功地反序列化也没关系。

##----------------------------序列化
import pickle
 
dic={'name':'alvin','age':23,'sex':'male'}
 
print(type(dic))#<class 'dict'>
 
j=pickle.dumps(dic)
print(type(j))#<class 'bytes'>
 
 
f=open('序列化对象_pickle','wb')#注意是w是写入str,wb是写入bytes,j是'bytes'
f.write(j)  #-------------------等价于pickle.dump(dic,f)
 
f.close()
#-------------------------反序列化
import pickle
f=open('序列化对象_pickle','rb')
 
data=pickle.loads(f.read())#  等价于data=pickle.load(f)
 
print(data['age'])

pickle和json的用法是一样的,二者学名都叫序列化,只不过json序列化之后的结果是字符串,pickle序列化后的结果是字节bytes。也就是说形式不同,内容是一样的,但是,pickle序列化后的是bytes,也就是要写入文件的数据是bytes,所以open打开文件的时候要以wb的形式二进制打开。pickle写入文件的内容是不可读的(乱七八糟的字符,但是计算机可以识别),json写入的数据是可读的。
pickle支持的数据类型更多,pickle可以序列化函数和类。虽然json不支持这两种序列化,但是大部分场景还是用json。


json模块和pickle模块
json模块和pickle模块文章来源地址https://www.toymoban.com/news/detail-454701.html


到了这里,关于json模块和pickle模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python:pickle 模块详解

    pickle 模块是 Python 中用于序列化和反序列化对象的标准模块。它可以将对象转换为字节流,以便将其保存到文件或通过网络传输,然后再将字节流还原为原始对象。以下是 pickle 模块的常用函数、示例以及一些注意事项: 用于将对象序列化并将结果写入文件。 用于从文件中读

    2024年02月01日
    浏览(32)
  • 园子的现代化建设-社群运营:欢迎加入园子的细分社群微信群

    为了方便大家与同道中(同一个技术领域)的园友进行交流,我们开始尝试运营一些细分社群,目前初步选择了以下几个技术领域创建了微信群: 博客园AI社群 博客园.NET社群 博客园Java社群 博客园Go社群 博客园Python社群 博客园C/C++社群 博客园前端社群 博客园移动端开发社群

    2024年02月06日
    浏览(50)
  • EX Sports中文Telegram社区正式成立啦 欢迎中国地区的伙伴加入

    完成任务即可领取EXS 任务: 1、 关注twitter+3分 2、 转发本条推文+2分 3、 加入中文Telegram社区+5分 4、 将表单分享并且成功邀请好友+5分/人 根据得分发放奖励 10分获得价值1USDT的EXS 20分获得价值2USDT的EXS 50分获得价值5UTSD的EXS 积分排名第一获得500USDT的EXS 积分排名第二获得300U

    2024年02月01日
    浏览(36)
  • Js水几个基础知识点:数组的操作,字符串和数组之间的互转,持续补充,欢迎关注

    一、插入 / 删除元素: 我们就不从创建开始讲了,那个太基础了,js创建数组一般都直接let arr = […,…,…],有部分仁兄喜欢new Array(…, …, …),这样看起来可能高级点,结果是一样的哈。 这里我们直接来讨论插入元素: 1、在末尾插入 / 删除元素(push / pop,操作原数组)

    2024年02月09日
    浏览(58)
  • 直播必备抖音智能语音互动播报机器人 一键欢迎新人加入直播间软件教程

    标题:抖音智能语音互动播报机器人——直播必备,欢迎新人加入直播间 随着直播行业的发展,越来越多的主播开始利用抖音平台进行直播,而吸引观众参与直播成为了一项重要的任务。为了提高直播互动性和观众黏性,抖音智能语音互动播报机器人应运而生。本文将为您介

    2024年02月03日
    浏览(286)
  • 数据持久化的利器,Python中的pickle模块详解

    📚 个人网站:涛哥聊Python Python数据序列化和反序列化时, pickle 模块是一个非常有用的工具。它允许将Python对象转换为字节流,以便存储在文件中或通过网络传输,然后将这些字节流重新转换回Python对象。 pickle 是Python标准库中的一个模块,用于将Python对象序列化(pickling)

    2024年02月19日
    浏览(38)
  • 解决Python中使用xlwings模块时出现的“_pickle.UnpicklingError: invalid load key, ‘\x00‘“错误

    解决Python中使用xlwings模块时出现的\\\"_pickle.UnpicklingError: invalid load key, ‘x00’\\\"错误 在使用Python编程语言进行数据处理和分析时,xlwings是一个常用的模块,它可以实现Python与Microsoft Excel之间的双向交互。然而,有时候在使用xlwings模块时,可能会遇到\\\"_pickle.UnpicklingError: invalid

    2024年02月04日
    浏览(36)
  • 第十四章 json模块

    Python 中的json 模块提供了对JSON 的支持,用于将JSON 格式字符串转换为Python 对象。首先需要了解一下什么是JSON。 什么是JSON JSON 是基于JavaScript 语言的轻量级的数据交换格式,是JavaScript 对象的表示法(JavaScriptObject Notation),它是用来存储和交换文本信息的。信息表示格式为:

    2024年02月09日
    浏览(36)
  • python标准库模块,json

    展示了如何使用json模块进行编码和解码操作的常规示例: json模块简介 json 模块是Python中的一个编码和解码JSON格式的轻量级模块,主要用于将Python对象编码为JSON格式输出或存储,以及将JSON格式对象解码为Python对象。 一、概览 常量、类或方法名 注解 json.dump 方法,传入一个

    2024年02月16日
    浏览(35)
  • Python 中的 JSON 模块详解及 JSON 数组的输出格式示例

    正文: 在 Python 中,JSON(JavaScript Object Notation)是一种常用的数据交换格式。Python 提供了一个内置模块 json 来处理 JSON 数据。本文将详细介绍 Python 中的 json 模块,包括 JSON 对象的序列化和反序列化,以及如何处理 JSON 数组。 1. 导入 json 模块 在使用 json 模块之前,我们需要

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包