python基础之JSON标准库

一、序列化的一些简单概念

  1. 我们平常使用的python对象所进行的操作是在内存中,当程序关闭就会被清空,所以我们需要用一种合适的方法将这些数据保存下来。
  2. 为了将我们的数据进行永久存储,需要引入序列化(pickling/serialization)的概念。
  3. 序列化的定义:将复杂的python数据结果转换成一个二进制数据集合(数据流)。反序列化:从数据流(字符串形式)重新构造复杂的python数据结构。
  4. 序列化的好处:我们可以通过网络或本地存储介质讲这些数据流保存或传输。
  5. 序列化的方法:引入json、pickling、marshal、shelve,其中最常用的是json

二、JSON标准库

2.1 基本用法
  1. json模块的序列化和反序列化方法分别是dumps和loads,json.dumps()和json.dump()将一个python对象转换成json串,json.loads()和json.load()将一个json串还原成python对象。
  2. json.dump()和json.dumps()的区别
    json.dump()处理的是文件对象,而json.dumps()处理的是字符串对象。
  3. json.load()和json.loads()的区别
    json.load()处理的是文件对象,而json.loads()处理的是字符串对象。
2.2 json.dumps()

将python的数据类型转换成json字串

语法格式:json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding='utf-8', default=None, sort_keys=False, **kw)

>>> import json>>> json.dumps([])'[]'>>> json.dumps('string')''string''>>> json.dumps(1) '1'>>> json.dumps({'name':'tyson','age':23})'{'age': 23, 'name': 'tyson'}'

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

使用参数能让JSON字串格式化输出:

>>> print json.dumps({'a': 'Runoob', 'b': 7}, sort_keys=True, indent=4, separators=(',', ': ')){    'a': 'Runoob',    'b': 7}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

较重要的参数:
sort_keys:是否排序
indent:定义缩进大小
separators:是一个元组,定义分隔符的类型
skipkeys:是否允许JSON字串编码字典对象时,字典的key不是字符串类型(默认是不允许)

a = ['foo', {'bar': ('baz', None, 1.0, 2)}]s = json.dumps(a, sort_keys=True, indent=4, separators=('!', '?')) #分隔符这里只是测试,一般保持默认逗号和分号即可print sresult:[ 'foo'! { 'bar'?[ 'baz'! null! 1.0! 2 ] }]

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
try:    data = {'a':1, 'b':2, (1,):3}    json.dumps(data)  except TypeError,e:    print e                                #keys must be a stringprint json.dumps(data,skipkeys=True)       #{'a': 1, 'b': 2}data = {'a':1, 'b':2, 1:3}print json.dumps(data)  result:keys must be a string{'a': 1, 'b': 2}{'a': 1, '1': 3, 'b': 2} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

python原始类型向json类型的转化对照表

python json
dict object
list,tuple array
str,unicode string
int,long,float number
True true
False false
None null
2.3 json.loads()

将json字串转换成python的数据类型。也就是反序列化。
语法格式:json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

json.loads('{'a':'Runoob','b':7}') {u'a': u'Runoob', u'b': 7}

  • 1
  • 2
  • 1
  • 2

json字串转换成python对象类型对照表

JSON Python
object dict
array list
string unicode
number(int) int
number(real) float
true True
false False
null
2.4 json.dump()

将序列化之后形成的JSON字串保存到文件。
语法格式:dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw):

#encoding:UTF-8import jsona={'name':'tyson','age':21,'sex':'boy'}#第一种方法将JSON字串写入文件中#该方法不需要closewith open('json.txt','a') as f:    f.write(json.dumps(a,indent=4))#第二种方法将JSON字串写入文件中f=open('json.txt','a')json.dump(a,f,indent=4)f.close()#json.txt{    'age': 21,     'name': 'tyson',     'sex': 'boy'}{    'age': 21,     'name': 'tyson',     'sex': 'boy'}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
2.5 json.load()

从文件接受JSON字串,并反序列化成为Python的数据类型。
语法格式:load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

#encoding:UTF-8import jsona={'name':'tyson','age':21,'sex':'boy'}#第一种方法将JSON字串写入文件中#该方法不需要closewith open('json','a') as f: f.write(json.dumps(a))#第一种方法将文件中的JSON字串转反序列化成Python的数据类型with open('json','r') as f: print json.loads(f.read())#json{'age': 21, 'name': 'tyson', 'sex': 'boy'}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

三、类的序列化

python的JSON想办法能将各种数据对象都转换为JSON,其中可选参数default就是用来提供给用户自行定义转换函数的

class student(object):    def __init__(self,name,sex,age):        self.name=name        self.sex=sex        self.age=agetyson=student('tyson','boy',21)print json.dumps(tyson,default=lambda obj:obj.__dict__)#python的JSON想办法能将各种数据对象都转换为JSON,其中可选参数default就是用来提供给用户自行定义转换函数的#所以上面的方法与下面这个是等同的def stuclass2json(classObject):    return{        'name':classObject.name,        'sex': classObject.sex,        'age':classObject.age    }print json.dumps(tyson,default=stuclass2json)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

四、多个JSON字串同时解析

一般不会遇到这种情况,待添加

(0)

相关推荐

  • python IO编程(文件读写、StringIO和BytesIO、操作文件和目录、序列化)

    学习目标: python学习十二. 学习内容: 1.文件读写 2.StringIO和BytesIO 3.操作文件和目录 4.序列化 1.文件读写 读写文件就是请求操作系统打开一个文件对象(通常称为文件 ...

  • python中的json、pickle

    json 提供了四个功能: dumps:将json数据转换为字符串 json.dumps(obj,skipkeys=False,separators=None,sort_keys=False) loa ...

  • Python实战013:如何将数据以JSON格式输出

    JSON(全称:JavaScript Object Notation) 是一种轻量级的数据交换格式,它的结构简洁.层次清晰也没有xml那么多标签描述让文件更加小巧且解析速度更快.非常适合做网络传输的数 ...

  • json的序列化与反序列化

    json 是一种轻量级的数据交换格式,也是完全独立于任何程序语言的文本格式. 本文介绍json字符串的序列化与反序列化问题. 序列化 是指将变量(对象)从内存中变成可存储或可传输的过程. 反序列化 是 ...

  • Python语言学习:Python常用自带库(imageio、pickle)简介、使用方法之详细攻略

    Python语言学习:Python常用自带库(imageio.pickle)简介.使用方法之详细攻略 imageio简介及其常见使用方法 IMAIO是一个Python库,它提供了一个简单的接口来读取和 ...

  • python笔记22-literal_eval函数处理返回json中的单双引号

    前言 在做接口测试的时候,最常见的接口返回数据就是json类型,json类型数据实际上就是字串,通常标准的json格式是可以转化成python里面的对应的数据类型的 有时候开发返回的数据比较坑,不按常 ...

  • python测试开发django-118.json 解析查询数据库 datetime 格式问题

    前言 django 查询的结果有日期时间格式的时候,返回的是datetime.datetime(2021, 9, 8, 0, 0)类型数据. 一般需要返回json格式数据,使用json.dumps() ...

  • python接口自动化5-Json数据处理

    前言 有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理. 一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的 ...

  • Python网络爬虫学习基础笔记

    python requests库爬虫基础 本次学习的python爬虫所使用的是requests库 下面就是requests库的7种主要方法 方法名 说明 requests.request() 构造一个 ...

  • Python基础入门之常用库汇总!

    Python有很多第三方库,这是人尽皆知的事情,但Python到底有多少个库,我想很多人应该都不了解,这篇文章小编详细的介绍一下. Chardet,字符编码探测器,可以自动检测文本.网页.xml的编码 ...

  • 诚之和:如何使用Go语言JSON 标准库

    本篇内容主要讲解"如何使用Go语言JSON 标准库",感兴趣的朋友不妨来看看.本文介绍的方法操作简单快捷,实用性强.下面就让小编来带大家学习"如何使用Go语言JSON 标 ...

  • 用Python标准库turtle画一头金牛,祝您新年牛气冲天!(附源码)

    今年是牛年,祝大家新年牛气冲天!嗨皮牛Year! 前几天在百度图片里下载了一张金牛的图片,就是封面的这张.想着用Python标准库turtle肯定可以画出这张图,所以说干就干,花两天时间实现了. 画图 ...

  • Python标准库模块之heapq

    该模块提供了堆排序算法的实现.堆是二叉树,最大堆中父节点大于或等于两个子节点,最小堆父节点小于或等于两个子节点. 创建堆 heapq有两种方式创建堆, 一种是使用一个空列表,然后使用heapq.hea ...

  • Python汇总篇,200+Python标准库介绍

    今天给大家介绍一下200多个Python标准库,让大家对Python标准库有一个大致的认识. 关于Python标准库 01 众所周知,Python是一个依赖强大的组件库完成对应功能的语言,为了便捷实现 ...

  • Python (3.9.4) 最新版标准库

    Python 标准库 Python 语言参考手册 描述了 Python 语言的具体语法和语义,这份库参考则介绍了与 Python 一同发行的标准库.它还描述了通常包含在 Python 发行版中的一些可 ...

  • 超全汇总!200 多个 Python 标准库介绍

    Python开发精选 分享 Python 技术文章.资源.课程.资讯. 10篇原创内容 公众号 今天给大家介绍一下200多个Python标准库,让大家对Python标准库有一个大致的认识. 关于Pyt ...

  • 【Python基础】Python中的高效迭代库itertools,排列组合随便求

    本文目录 一.模块概述 二.组合生成器 2.1 product 2.2 permutations 2.3 combinations 2.4 combinations_with_replacement ...

  • python语言线程标准库threading.local源码解读

    本段源码可以学习的地方: 1. 考虑到效率问题,可以通过上下文的机制,在属性被访问的时候临时构建: 2. 可以重写一些魔术方法,比如 __new__ 方法,在调用 object.__new__(cls ...