Python学习之json序列化

一、什么是序列化

在我们存储数据或者网络传输数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和传输的数据格式。这个过程叫序列化,不同的序列化结果也不同,但目的是一样的,都是为了存储和传输

在Python中三种序列化的方案:

  1. pickle,可以将我们Python中任意数据类型转化为bytes并写入到文件中。同样也可以把文件中写好的bytes转换回到我们Python的数据-这个过程被称为反序列化。
  2. shelve简单另类的一种序列化方案。有点类似于Redis,可以作为一种小型的数据库来使用。
  3. json,将Python中常见的字典,列表转化成字符串,是目前前后端数据交互使用频率最高的一种数据模式。

二、json

1.什么是json

json是前后端交互的枢纽,相当于编程界的普通话,前后端用Python沟通。因为json的语法格式可以完美的表示出一个对象。那么什么是json:json全称JavaScript object notation,即js对象简谱,例如下面代码示例:

{
  "id": 1,
  "title": "Python从入门到放弃(第二版)",
  "pub_date": "2018-01-11",
  "category": "Python",
  "publisher": {
    "id": 1,
    "name": "北京出版社"
  },
  "post_authors": [
    {
      "id": 2,
      "name": "佚名"
    }
  ]
}

这段形如Python字典的东西在JavaScript里面叫json,其实是一样的。我们发现用这样的数据结构可以完美的表示出任何对象,并且可以完整的把对象表示出来。只要代码格式比较好,那么可读性也挺强的,所以大家公认用这样一种数据结构作为数据交互的格式。

在json之前,通常用的数据结构为XML,形如:

<?xml version="1.0" encoding="utf-8" ?>
<book>
<title>Python从入门到放弃(第二版)</title>
<pub_date>2018-01-11</pub_date>
<category>Python</category>
<publisher>
    <id>1</id>
    <name>北京出版社</name>
</publisher>
</book>

总之,XML格式的文件在维护和处理上相比json文件很难解析,所以后来大都倾向于使用json这一数据结构了。

2.json在Python中的用法

字典 -> json

要先引入json模块,再进行处理

import json
dic = {"姓名": "程序猿", "年龄": 28, "头发": None}
s = json.dumps(dic)
print(s)

# 输出:
>>>{"\u59d3\u540d": "\u7a0b\u5e8f\u733f", "\u5e74\u9f84": 28, "\u5934\u53d1": null}

结果很不友好啊. 那如何处理成中?呢? 在dumps的时候给出另一个参数ensure_ascii=False就可以了了。

import json
dic = {"姓名": "程序猿", "年龄": 28, "头发": None}
s = json.dumps(dic, ensure_ascii=False)
print(s)

# 输出:
>>>{"姓名": "程序猿", "年龄": 28, "头发": null}

json -> 字典

上面介绍的是如何把字典格式的数据转化为json,那么怎么把前端传递过来的json文件转化为字典格式呢:

import json
s = ‘{"姓名": "程序猿", "年龄": 28, "头发": null}‘
# 注意此处要加引号,表示s为字符串-the JSON object must be str
dic = json.loads(s)
print(dic)
print(type(dic))

# 输出:
>>> {‘姓名‘: ‘程序猿‘, ‘年龄‘: 28, ‘头发‘: None}
>>> <class ‘dict‘>

写入/读取json文件

json也可以像pickle一样把序列化的结果写入到文件中:

原文地址:https://www.cnblogs.com/russellyoung/p/Python-xue-xi-zhijson-xu-lie-hua.html

时间: 2024-08-05 09:21:58

Python学习之json序列化的相关文章

python学习之 -- 数据序列化

json / pickle 数据序列化 序列化定义:把变量从内存中变成可存储或传输的过程称为序列化.反序列化:把变量内容从序列化的对象重新读到内存里称为反序列胡. 序列化模块之--pickle使用注意:在python3里,进行一次序列化后,然后在进行反序列化,不要重复多次序列化,否则无法进行反序列化.pickle:是python独有的序列化模块,只能作用于python变量,是将数据对象转化为bytes.功能:用于python特有的类型和python的数据类型间进行转换.举例: 1 import

django学习之- json序列化

序列化操作 - Errordict - 自定义Encoder - django的模块可以直接序列化 第一种: from django.core import serializers # 通过这个模块对queryset对象可以直接序列化 ret = models.tb.objects.all() data = serializers.serialize("json",ret) #这里指定将ret序列化为json 第二种: ret = models.tb.objects.values('i

从零开始的Python学习Episode 17——序列化

序列化 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语 言中也被称之为serialization,marshalling,flattening等等,都是一个意思. 序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上. 反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling. json 如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好 的方法是序列

Json序列化

最近在学习FyiReporting的源码,参考FyiReporting的报表对象定义,结合自己在工作中开发报表的应用场景,自己设计了一套报表对象定义,实现在报表设计器中报表对象的修改,通过序列化成Json对象来达到存储报表对象,相对于FyiReporting报表直接对报表定义的XML操作省去编写大量直接解析XML文档的方法,可能会带来点效率损失.本文主要目的在总结自己在序列化对象的时候对类信息标记常用用法,不在于对FyiReporting做过多探讨.首先自己写的Json序列化操作的类: clas

Python学习心得(五) random生成验证码、MD5加密、pickle与json的序列化和反序列化

# -*- coding:utf-8 -*- import random as rd #验证码 import hashlib as hsl #MD5加密 import pickle,json #pickle与json序列化 #print rd.randint(1,5) #print help(range) #print help(rd.randint) #随机生成6位验证码: code = [] for i in range(1,7): if i == rd.randint(1,6): code

python学习第四章之json与pickle数据序列化

1.终于学到json了,简直是万分期待 2.json序列化:json.dumps() json反序列化:json.loads() json对字典.列表.字符串起作用,可以在不同语言间进行交互. pickle只支持python语言,Java只认识json,一般是dump一次,对应的load一次 3.(1)使用json将字典的一个内容存入文本中, import json info={ 'name':'alex', 'age':22 } f=open("test.text","w&

Python学习笔记__9.4章 序列化

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 在程序运行的过程中,所有的变量都是在内存中.但是一旦程序结束,变量所占用的内存就被操作系统全部回收.而如果要保存变量的修改,我们就可以用序列化. 我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling. 序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上 反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling. 2.pickle模块 Python提供了

python学习第十三节(sys,logging,logger,json)

sys模块sys模块是python和解释器之间交流的模块 sys.argv 在cmd中将可以输入内容后 自动形成为列表,可以在程序中先切片,验证登录的作用. sys.exit() 程序立刻结束,无论后面有什么程序.sys.path 显示当前搜索模块的路径优先搜索当前脚本所在目录的路径查找所需模块,没有就去python环境变量去找可以用下面这种方式在sys.path的列表中添加一个搜索的路径,叫他去另一个路径去搜索模块 log的错误日志配置文件,blog地址 http://www.cnblogs.

python:用json把字典序列化到文件中

#写程序最好是dump一次和load一次,可以存好几个文件 import json info={'name':'Tom', 'age':'12', 'job':'work',} f=open('file1.txt','w') f.write(json.dumps(info)) f.close() 把字典存入文件中 info={'name':'Tom', 'age':'12', 'job':'work',} f=open('test.txt','w') f.write(str(info)) f.c