国开行网站毕业申请怎么做什么好的主题做网站
在 Python3版本中使用 JSON
本教程将会教我们如何使用 Python 编程语言编码和解码 JSON。
环境
在python3中(以及python2.6版本后的python2版本)内置了JSON模块,无需额外安装另外的JSON模块。
简介
JSON模块是python内置的用来进行python对象序列化和反序列化的模块。
序列化,指将python对象转换为json格式的数据流,反序列化则是将json格式的数据流转换为python对象。
该模块中常用的方法有以下四个:
- json.dump 将Python对象序列化为Json格式的数据流并写入文件类型的对象中
 
- json.dumps 将Python对象序列化为Json格式的字符串
 
- json.load 从文件类型的对象中读取Json格式的数据并反序列化成Python对象
 
- json.loads  将包含Json格式数据的字符串反序列化成Python对象
 
两个dump函数是将python对象转换为json,可以理解为编码(类似demjson的encode函数),两个load函数是将json转换为python对象,可以理解为JSON解析(类似demjson的code函数)。因为两个dump和两个load的功能相似,所以小编只介绍其中一个(介绍JSON格式数据的字符串的编码与解析,也就是dumps和loads函数)。
json.dumps()
dumps可以传递的参数如下:
json.dumps(obj,  skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False) 
在日常使用中,更多的情况我们只传递必须的obj参数(这是一个对象),其他参数为可选参数,下表是该函数的所有参数的作用:
| 参数 | 作用 | |||
 obj(必选项) | 要序列化的python对象 | |||
 skipkeys=False |  是否跳过要序列化的对象中字典元素的key不是基本类型的数据; 如果为 True,则跳过,如果为 False,将抛出 TypeError异常。 | |||
 ensure_ascii=True |  是否将要序列化的对象中的字符串中的非ascii字符进行转义。  如果该参数为  | |||
 check_circular=True |  是否进行容器类型的循环引用检查。  如果该参数设置为 如果该参数设置为  | |||
 allow_nan=True |  是否允许序列化超出范围的float 类型的值(如float('inf') 、float('-inf') 、float('nan') )。 如果该参数设置为 如果该参数设置为  | |||
 indent=None |  是否在数组元素和对象成员前增加缩进以便使格式更加美观。  如果该参数设置为大于等于1的整数,则添加换行符和对应数量的空格表示缩进,如果设置为  | |||
 separators=None |  设置Json中各项之间、对象的键和值之间的分隔符;  该参数必须是一个2元组,元组第一个元素表示Json数据中各项之间的分隔符,元组的第二个元素表示Json对象的键和值之间的分隔符。默认的分隔符为(’,’, ‘:’)  | |||
 default=None | 指定一个函数,用来将不可进行序列化的Python对象转化为可序列化的Python对象。 | |||
 cls=None |  指定一个定制的JSONEncoder 的子类(例如,重写了.default() 方法用来序列化附加的类型),指定该参数时请使用cls 关键字参数。如果未指定该参数,则将使用默认的JSONEncoder 。 | |||
 sort_keys=False |  是否要将对象中字典元素按照key进行排序。  默认为  | |||
举个简单的例子:
#!/usr/bin/python3
import json
# Python 字典类型转换为 JSON 对象
data = {'no' : 1,'name' : 'W3CSchool','url' : 'http://www.w3cschool.cn'
}
json_str = json.dumps(data)
print ("Python 原始数据:", repr(data))
print ("JSON 对象:", json_str) 
python对象转化为JSON字符串的时候遵循以下转换规则:
| Python | Json | 
|---|---|
| dict | object | 
| list, tuple | array | 
| str | string | 
| int, float | number | 
| True | true | 
| False | false | 
| None | null | 
json.loads()
loads可以传递的参数如下:
json.loads(s,encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None) 
在日常使用中,更多的情况我们只传递必须的s参数(这是一个字符串),其他参数为可选参数,下表是该函数的所有参数的作用:
| 参数 | 作用 | |||
 s(必选项) | 要反序列化的JSON字符串 | |||
| encoding=None | 该参数已弃用,将会被忽略 | |||
| cls=None |  指定一个定制的JsonDecoder 子类,以便实现特定的反序列化需求; | |||
| object_hook=None |   接受一个可调用对象,用于处理解码后生成的Python对象中 注意,这个处理过程是递归进行的,即返回的Python对象内部所有的字典结构都将被这个方法处理  | |||
 parse_float=None |   用于处理解码后的Python对象中的  | |||
 parse_int=None |  接受一个可调用对象,用于处理解码后的Python对象中的int 类型的值。 | |||
 parse_constant=None | 接受一个可调用对象,用于解码时对 Infinity、 -Infinity、 NaN或其他非法的Json数值的处理。 | |||
 object_parse_hook=None | 如果指定了该参数并且设置为一个可调用对象,那么Json对象将被解码成一个元素为二元组的列表,二元组的两个元素分别为Json对象中的键值对的键和值,并且列表中元素的顺序与Json对象中键值对的顺序一致。 | |||
举个简单的例子:
#!/usr/bin/python3
import json
# Python 字典类型转换为 JSON 对象
data1 = {'no' : 1,'name' : 'W3CSchool','url' : 'http://www.w3cschool.cn'
}json_str = json.dumps(data1)
print ("Python 原始数据:", repr(data1))
print ("JSON 对象:", json_str)# 将 JSON 对象转换为 Python 字典
data2 = json.loads(json_str)
print ("data2['name']: ", data2['name'])
print ("data2['url']: ", data2['url']) 
与序列化的过程类似,JSON转化为python对象也遵循一定的规则:
| Json | Python | 
|---|---|
| object | dict | 
| array | list | 
| string | str | 
| number(int) | int | 
| number(real) | float | 
| true | True | 
| false | False | 
| null | None | 
