json模块

json.dump(objfp*skipkeys=Falseensure_ascii=Truecheck_circular=Trueallow_nan=Truecls=Noneindent=Noneseparators=Nonedefault=Nonesort_keys=False**kw)

将obj序列化为一个JSON格式的流到fp (a .write()-支持文件样对象)使用这个转换表。

如果skipkeys是true的(默认为False),那么将跳过不属于基本类型(str, int, float, bool, None)的命令键,而不是增加一个类型错误。

json模块总是产生str对象,而不是字节对象。因此,fp.write()必须支持str输入。

如果ensure_ascii是true(默认值),那么输出将保证所有传入的非ascii字符都可以转义。如果ensure_ascii是false,那么这些字符将按原样输出。

如果check_loop为false(默认为True),那么将跳过容器类型的循环引用检查,循环引用将导致溢出错误(或更糟).

:如果allow_nan是假的(默认值为True),那么它将是一个ValueError,在严格遵从JSON规范的情况下,将range浮点值(nan, inf, -inf)序列化。如果allow_nan为true,则将使用它们的JavaScript等效项(NaN,∞,-∞)

:如果indent是一个非负整数或字符串,那么JSON数组元素和对象成员将被打印在缩进级别上。缩进级别为0、负数或“”只会插入新行。None(默认)选择最紧凑的表示形式。使用一个正整数缩进,在每个级别上有许多空格。如果缩进是一个字符串(比如“\t”),那么该字符串被用于缩进每个级别。

在版本3.2中更改:允许在整数之外添加缩进的字符串。

如果指定,分隔符应该是一个(item_separator, key_separator)元组。默认值是(',',':')如果缩进是None,(',', ': '),否则。为了获得最紧凑的JSON表示,您应该指定(',',':')来消除空白。

 

在版本3.4中更改:使用(',',':')作为默认,如果缩进不是None。

如果指定,默认值应该是一个函数,该函数被调用的对象不能被序列化。它应该返回一个JSON可编码版本的对象或引发一个类型错误。如果没有指定,就会出现TypeError。

如果sort_keys是真(默认为False),那么字典的输出将按键排序。 要使用自定义的JSONEncoder子类(例如,重写默认()方法以序列化其他类型),请用cls kwarg指定它;否则JSONEncoder使用。 在版本3.6中更改:所有可选参数现在都是关键字。

 

json.load(fp*cls=Noneobject_hook=Noneparse_float=Noneparse_int=Noneparse_constant=Noneobject_pairs_hook=None**kw)

使用此转换表将fp (a .read()-支持的文件-like对象包含一个JSON文档)转换为Python对象。

object_hook是一个可选的函数,它将随任何对象的字面译码(一个命令)的结果调用。object_hook的返回值将被使用而不是命令。该特性可用于实现自定义解码器(例如,JSON-RPC类提示)。

object_pairs_hook是一个可选的函数,它将被调用的结果与一个有序的成对列表进行解码。object_pairs_hook的返回值将被使用,而不是命令。该特性可用于实现依赖于密钥和值对被解码的顺序的自定义解码器(例如,collections.OrderedDict()将记住插入的顺序)。如果还定义了object_hook,则object_pairs_hook优先。

在版本3.1中更改:添加对object_pairs_hook的支持。

如果指定了parse_float,将使用每个JSON浮动的字符串进行调用。默认情况下,这相当于float(num_str)。这可以用于为JSON浮动使用另一种数据类型或解析器(如小数点)。

如果指定了parse_int,将会调用每个JSON int的字符串来进行解码。默认情况下,这相当于int(num_str)。这可以用于为JSON整数(例如float)使用另一个数据类型或解析器。

parse_constant,如果指定的话,将会调用以下字符串之一:'-∞','∞','NaN'。如果遇到无效的JSON数字,可以使用此方法来引发异常。

在版本3.1中更改:parse_constant不再被调用为“null”、“true”、“false”。

要使用自定义的JSONDecoder子类,请用cls kwarg指定它;否则JSONDecoder使用。附加的关键字参数将传递给类的构造函数。 如果被反序列化的数据不是有效的JSON文档,将会提高JSONDecodeError。 在版本3.6中更改:所有可选参数现在都是关键字

 1 #!/usr/bin/env python
 2 # -*- encoding:utf-8 -*-
 3 import json
 4 
 5 # dict to json object
 6 data1 = {
 7     'no': 1,
 8     'name': 'runoob',
 9     'url': 'http://www.runoob.com'
10 }
11 
12 json_str = json.dumps(data1)
13 # Python 原始数据: {'name': 'runoob', 'no': 1, 'url': 'http://www.runoob.com'}
14 # JSON 对象: {"name": "runoob", "no": 1, "url": "http://www.runoob.com"}
15 print("Python 原始数据:", repr(data1))
16 print("JSON 对象:", json_str)
17 
18 # json to dict
19 data2 = json.loads(json_str)
20 # data2['name']:  runoob
21 # data2['url']:  http://www.runoob.com
22 print("data2['name']: ", data2['name'])
23 print("data2['url']: ", data2['url'])

如果处理的是文件而不是字符串,可以使用 json.dump() 和 json.load() 来编码和解码JSON数据(与pickle相似)。例如:

1 # 写入 JSON 数据
2 with open('data.json', 'w') as f:
3     json.dump(data, f)
4 
5 # 读取数据
6 with open('data.json', 'r') as f:
7     data = json.load(f)

部分参考:http://www.runoob.com/python3/python3-json.html

更多资料参考:https://docs.python.org/3/library/json.html

posted on 2018-01-17 21:43  jovelove  阅读(138)  评论(0编辑  收藏  举报