通过文件操作,我们可以将字符串写入到一个本地文件。但是,如果是一个对象(例如列表、字典、元组等),就无
法直接写入到一个文件里,需要对这个对象进行序列化,然后才能写入到文件里。
设计一套协议,按照某种规则,把内存中的数据转换为字节序列,保存到文件,这就是序列化,反之,从文件的字
节序列恢复到内存中,就是反序列化。
对象—>字节序列 === 序列化
字节序列—>对象 ===反序列化
Python中提供了JSON这个模块用来实现数据的序列化和反序列化。
 
JSON模块
JSON(JavaScriptObjectNotation, JS对象简谱)是一种轻量级的数据交换标准。JSON的本质是字符串
 
使用JSON实现序列化
JSON提供了dump和dumps方法,将一个对象进行序列化。
 
dumps方法的作用是把对象转换成为字符串,它本身不具备将数据写入到文件的功能。
import json
file = open('names.txt', 'w')
names = ['zhangsan', 'lisi', 'wangwu', 'jerry', 'henry', 'merry', 'chris']
# file.write(names) 出错,不能直接将列表写入到文件里

# 可以调用 json的dumps方法,传入一个对象参数
result = json.dumps(names)

# dumps 方法得到的结果是一个字符串
print(type(result)) # <class 'str'>

# 可以将字符串写入到文件里
file.write(result)

file.close()
dump方法可以在将对象转换成为字符串的同时,指定一个文件对象,把转换后的字符串写入到这个文件里
import json
file = open('names.txt', 'w')
names = ['zhangsan', 'lisi', 'wangwu', 'jerry', 'henry', 'merry', 'chris'] # dump方法可以接收一个文件参数,在将对象转换成为字符串的同时写入到文件里
json.dump(names, file) file.close()
 
使用JSON实现反序列化
使用loads和load方法,可以将一个JSON字符串反序列化成为一个Python对象。
 
loads方法需要一个字符串参数,用来将一个字符串加载成为Python对象
import json
# 调用loads方法,传入一个字符串,可以将这个字符串加载成为Python对象
result = json.loads('["zhangsan", "lisi", "wangwu", "jerry", "henry", "merry", "chris"]')
print(type(result)) # <class 'list'>
load方法可以传入一个文件对象,用来将一个文件对象里的数据加载成为Python对象
import json 

# 以可读方式打开一个文件
file = open('names.txt', 'r') # 调用load方法,将文件里的内容加载成为一个Python对象
result = json.load(file) print(result)
file.close()

一些操作

# fp = open('test.txt','w')
# # 默认情况我们只能将字符串写入到文件中
# fp.write('hello world')
#
# fp.close() # fp = open('test.txt','w')
# # 默认情况下报错 对象是无法写入到文件中 如果想写入到文件 那么必须使用序列化操作
# name_list = ['zhangsan','lisi']
#
# fp.write(name_list) -----------------------------------------------------------------------------------------
# 序列化的2种方式
# dumps
# (1)创建一个文件
# fp = open('test.txt','w')
#
# # (2)定义一个列表
# name_list = ['zs','ls']
#
# # 导入json模块到该文件中
# import json
# # 序列化
# # 将python对象 变成 json字符串
# # 我们在使用scrapy框架的时候 该框架会返回一个对象 我们要将对象写入到文件中 就要使用json.dumps
# #操作数据
# names = json.dumps(name_list)
# print(name) #['zs', 'str']
# print(type(name)) # <class 'str'>
# # 将names写入到文件中
# fp.write(names)
# fp.close() ------------------------------------------------------------------------------------------ # dump
# 在将对象转换为字符串的同时,指定一个文件的对象 然后把转换后的字符串写入到这个文件里 # fp = open('text.txt','w')
# #
# # name_list = ['zs','ls']
# #
# # import json
# # 相当于names = json.dumps(name_list) 和 fp.write(names)
# # 操作文件
# # json.dump(name_list,fp)
# #
# # fp.close()
-------------------------------------------------------------------------------------------- # 反序列化
# 将json的字符串变成一个python对象 # fp = open('text.txt','r')
#
# content = fp.read()
#
# # 读取之后 是字符串类型的
# print(content) #['zs', 'ls']
# print(type(content)) # <class 'str'>
#
# # loads
# import json
# # 将json字符串变成python对象
# 操作数据
# result = json.loads(content)
# # 转换之后
# print(result) #['zs', 'ls']
# print(type(result)) # <class 'list'> --------------------------------------------------------------------------------------------
# load
fp = open('text.txt','r') import json
# 操作文件
result = json.load(fp) print(result) # ['zs', 'ls']
print(type(result)) # <calss 'list'> fp.close()

JSON实现序列化dump和dumps方法,JSON实现反序列化loads和load方法的更多相关文章

  1. $(document).Ready()方法 VS OnLoad事件 VS $(window).load()方法

    $(document).Ready()方法 VS OnLoad事件 VS $(window).load()方法接触JQuery一般最先学到的是何时启动事件.在曾经很长一段时间里,在页面载入后引发的事件 ...

  2. 超高性能的json序列化之MVC中使用Json.Net

    先不废话,直接上代码 Asp.net MVC自带Json序列化 /// <summary> /// 加载组件列表 /// </summary> /// <param na ...

  3. Json和序列化总结

    一.序言 遇到问题,就经常逛园,不知你是否曾有,曾经遇到的问题,或者在园子里看到问题的方案,过一段时间,有可能还会摔跤,哈哈...大神请勿喷,小弟记忆不太好,还过来找资料,如果自己写把问题或某个知识点 ...

  4. JavaWeb_(Jar)使用fastjson解析json和序列化对象

    菜鸟教程 传送门 JSON官网 传送门 fastjson插件下载 传送门 序列化[百度百科]:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对 ...

  5. 你真的了解load方法么?(转载)

    本文授权转载,作者:左书祺(关注仓库,及时获得更新:iOS-Source-Code-Analyze) 因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Ma ...

  6. 【OC底层】Category、+load方法、+initialize方法原理

    Category原理 - Category编译之后的底层结构是 struct categroy_t,里面存储着分类对象方法.属性.协议信息- 当程序运行时,通过runtime动态的将分类的方法.属性. ...

  7. Hibernate 中 load() 方法导致的 noSession 异常

    之所以要写这个,是因为最近碰到了一个延迟加载的 load() 导致出现 noSession 的异常. 下面第三种方式解决这个问题需要用到一个本地线程的对象,也就是 ThreadLocal 类,之前写过 ...

  8. Hibernate中session回话的get方法和load方法的区别

    1.报错方式不同: 前提:获取的数据不存在 get方法会报异常:空指针异常 load方法会报异常:对象为找到异常,给定值没有行存在. 2.load方法 这种方式总是会返回一个代理而不是真正得去查询数据 ...

  9. js进阶 14-2 如何用ajax验证登陆状态(这里用load方法)

    js进阶 14-2 如何用ajax验证登陆状态(这里用load方法) 一.总结 一句话总结:$('#test').load('test.php?password=1234560'),这样就get方式提 ...

随机推荐

  1. T-SQL——关于SQL打开Excel文件

    目录 0. 背景说明 1. 安装Access Database Engine 1. SQL脚本 3. .net项目中通过Micsoft.ACE.oledb读取Excel文件 志铭-2021年10月1日 ...

  2. NOIP模拟66

    T1 接力比赛 解题思路 其实就是一个背包 DP ,也没啥好说的也就是一个优化,每次枚举之前的前缀和. 比较妙的就是一个 random_shuffle 可以整掉部分卡人的数据(但是好像 sort 一下 ...

  3. 详解package-lock.json的作用

    目录 详解package-lock.json package-lock.json的作用 版本号的定义规则与前缀对安装的影响 改动package.json后依旧能改变项目依赖的版本 当前项目的真实版本号 ...

  4. Apache Dubbo理解和应用

    官网:https://dubbo.apache.org/ slogan:高性能.轻量级的开源Java RPC框架 提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和 ...

  5. iOS自动化之WDA(WebDriverAgent)安装

    1.WDA介绍 WebDriverAgent 在 iOS 端实现了一个 WebDriver server ,借助这个 server 我们可以远程控制 iOS 设备.你可以启动.杀死应用,点击.滚动视图 ...

  6. PAT (Basic Level) Practice (中文)1009 说反话 (20分)

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小 ...

  7. Java(2)详解注释&关键字&常量&变量&标识符

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201497.html 博客主页:https://www.cnblogs.com/testero ...

  8. Java(30)集合五Set

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228440.html 博客主页:https://www.cnblogs.com/testero ...

  9. 【UE4 C++ 基础知识】<6> 容器——TMap

    概述 TMap主要由两个类型定义(一个键类型和一个值类型),以关联对的形式存储在映射中. 将数据存储为键值对(TPair<KeyType, ValueType>),只将键用于存储和获取 映 ...

  10. 6月4日 Scrum Meeting

    日期:2021年6月4日 会议主要内容概述:讨论账单功能模块,讨论账单前后端接口. 一.进度情况 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作中遇到的困难 徐宇龙 后端 账单数据界面 设 ...