Python 数据持久化:JSON

编程派微信号:codingpy

淡蓝色字体可以直接点击查看

上周更新的《Think Python 2e》第14章讲述了几种数据持久化的方式,包括dbm、pickle等,但是考虑到篇幅和读者等因素,并没有将各种方式都列全。

本文将介绍一个与pickle类似的轻量级数据持久化方式,即json。而且json格式也是在网络数据传输的一种常见格式,非常有了解和学习的必要。

JSON与Pickle的区别

Python官方文档中是这么比较JSON与Pickle的:

JSON是文本形式的存储,Pickle则是二进制形式(至少常用二进制)

JSON是人可读的,Pickle不可读

JSON广泛应用于除Python外的其他领域,Pickle是Python独有的

JSON只能dump一些python的内置对象,Pickle可以存储几乎所有对象

JSON一般使用方式

Python中处理json的自带库就是json模块,需要用到的方法大致就是以下4个,其实它们的参数有很多这里暂且省略。

可以看到,结尾带s就是在字符串层面上操作,如果不带s就是在文件层级操作。obj指的是需要转化的对象,可以是一个字典或者列表,fp是文件句柄,用open打开。s则是一个字符串。

dumps返回的是一个字符串,load和loads则会返回python的对象。

以上是最简单的一些使用方式,这里还有一些实用的参数可以选择。

ensure_ascii参数,是在有中文的情况下,设置为False可以防止将其解码而得到乱码,在loads的时候可以指定encoding来保持编码。

indent参数如果不指定的话,输出的字符串就是紧凑的形式,indent指定为4就可以输出缩进为4的美化形式,在需要给人看的时候用这个不错。

JSON序列化datetime问题

Python自己的json.dumps不能序列化datetime对象,如果需要dump这类对象时可以自己定义JSONEncoder。

这样在dump时指定cls参数就可以完成序列化datetime的任务了,如果觉得麻烦的话,可以使用偏函数的方法自己封装一下。

simplejson

Python中自带的json库是在2.6版本中才加入的。因此,如果你需要使用一个更早的Python版本并且处理json数据,那么你可以安装一个第三方库:simplejson。

simplejson模拟了自带的json库,目前支持Python 2.5+和Python 3.3+。根据官方文档的介绍,该库在没有安装C扩展的情况下,速度仍优于自带的json库。这应该也是为什么simplejson在PyPI的下载数超高的原因之一。

要使用simplejson,你只需要像下面这样导入即可:

import simplejson as json

其他的代码不需要修改。

本文参考了http://brieflyx.me/2015/python-module/python-data-persistence/一文。

python变量持久化_Python 数据持久化:JSON相关推荐

  1. python类型转换异常_python知识:json格式文本;异常处理;字符串处理;unicode类型和str类型转换...

    python进程中的实例和json格式的字符串之间的映射关系是非常直接的,相当于同一个概念被编码成不同的表示: stream in json form ----json.loads(str)----- ...

  2. 关于python变量使用_Python 基础知识关于变量的定义使用

    转自:https://www.cnblogs.com/manongajie/p/12736991.html 1 python 变量概述 变量,英文叫做 variable. 从形式上看,每个变量都拥有独 ...

  3. python变量运算符_Python基础 — 变量和运算符

    序言:这一章我们将学习变量以及常见的类型,我们将以案例和代码相结合的方式进行梳理,但是其中所有的案例和知识点 都是Python3 版本. 变量和运算符 1.1 初步介绍 ​ 在程序设计中,变量是一种存 ...

  4. python 变量引用_Python 知识要点:变量及引用

    变量使用前必须赋值,变量赋值后才会被创建. 变量名 = 值 变量的命名:可以由字母,数字,下划线组成,不能以数字开头,不能与关键字重名,每个单词小写. 定义变量时不需要指定变量的类型,在内存中创建一个 ...

  5. 持久化框架数据持久化框架(JPA)及其具体实现

    时间紧张,先记一笔,后续优化与完善. 对于数据的持久化问题,我们很容易想到,也很长用到持久化框架jpa. 持久化框架实现起来重要包括以下几个部分 1开发持久化bean Persistence.xml ...

  6. 9.4 Python读取各国GDP数据的json文件并用Pygal绘图

    4.读取各国GDP数据的json文件并用Pygal绘图 各国 GDP 数据的 json 文件下载 步骤: 读取 json 数据 json 模块包含了将 json 字符串恢复成 Python 对象函数, ...

  7. python 变量命名空间_Python命名空间– Python变量范围

    python 变量命名空间 In this tutorial, we are going to learn about Python Namespace and variable scope. In ...

  8. python持久化数据_Python数据持久化-mysql篇

    1.下载pymysql模块 pymysql模块对python3的支持比较好 安装命令:pip install pymysql 2.新建一个数据库 会用可视化工具hedisql或者navicat创建数据 ...

  9. python保存数据使用csv和excel哪种文件最好_Python数据持久化-csv、excel篇

    2018年7月4日笔记 学习目标: 1.会使用Python第三方模块操作CSV文件 2.会使用Python第三方模块操作EXCEL文件 本章内容: Python操作CSV:什么是CSV.Python如 ...

最新文章

  1. python 顺序栈及基本操作
  2. 剑网三通过VR来进行游戏快乐,是不是会加倍?什么时候用得上?
  3. github star破13k,Dapr 能否引领云原生中间件的未来?
  4. 不使用JavaScript实现菜单的打开和关闭
  5. POJ 1258 Agri-Net (最小生成树)
  6. Haar特征原理与icvCreateIntHaarFeatures方法的具体实现附详细注释—— 人脸识别的尝试系列(二)
  7. openjdk7的ImageIO.read()导致jvm异常crash
  8. 酷我 android 目录,酷我听听:Android平台最强音乐播放器
  9. 9. JavaScript 事件参考手册
  10. Sqli-Lab实验环境搭建(phpstudy环境安装、火狐浏览器插件安装、sqlmap安装、Sqli-Lab安装)
  11. html 打印页面不全,浏览器网页打印内容显示不全的解决方法教程[多图]
  12. ORACLE 11G使用exp或者pl/sql导出空表
  13. oracle 11g不能启动,[求助]oracle 11g无法启动
  14. exchange rate维护
  15. %大赛D--链式前向星+SPFA(BFS)+各种数据类型+各种最短路复习
  16. 开发必备的最高100个 Flutter 开源精品项目
  17. java如何实现系统定位_如何快速定位到系统中某一功能的具体实现
  18. 理解事务四大特性(Transaction)——原子性、一致性、隔离性和持久性(ACID)
  19. Excel日期连接后变数字
  20. YTU 2325 查找【数组】

热门文章

  1. 带有谓词的Java中的函数样式-第2部分
  2. python用pip安装numpy mac_Mac下python安装numpy,pandas,matplotlib
  3. SQL查询语句的排序
  4. Linux 如何查看命令所在位置/查看命令文件所在位置
  5. Mac OS 在远程主机(Linux 系统)上使用命令执行 sql 脚本文件(使用的是 MySQL 数据库)
  6. python比较excel表格内容并提取_利用python提取多张excel表数据并汇总到同一张新表中...
  7. mlp神经网络_白天鹅黑天鹅灰天鹅?卷积神经网络帮你搞定识别
  8. arch linux界面优化,Archlinux 启动优化
  9. 打开 谷歌浏览器exe_专治各种网银不服:两步开启微软Edge浏览器IE兼容模式
  10. LeetCode 09. 回文数