简介
JSON是一种轻量级的数据交换格式,它具有格式简单,易于读写,易于解析等优点。wiki中是这样定义JSON的:
In computing, JavaScript Object Notation or JSON is an open-standard file format that uses human-readable text to transmit data objects consisting of attribute–value pairs and array data types (or any other serializable value). It is a very common data format used for asynchronous browser–server communication, including as a replacement for XML in some AJAX-style systems.
JSON is a language-independent data format. It was derived from JavaScript, but as of 2017 many programming languages include code to generate and parse JSON-format data. The official Internet media type for JSON is application/json. JSON filenames use the extension .json.
Encode过程
Encode是把Python对象转换成JSON对象的过程。Python对象和JSON对象类型对应规则如下:
Python | JSON |
---|---|
dict | object |
list,tuple | array |
str,unicode | string |
int,long,float | number |
True | true |
False | false |
None | null |
常用方法有两个:dump和dumps。
dump函数参数说明
json.dump(obj, fp, 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)
dump函数将Python对象“obj”转换成JSON对象后写入文件fp,fp是一个可写文件对象。
- 如果skipkeys为True,则跳过非基本类型的键值(str, unicode, int, long, float, bool, None),否则会抛出TypeError错误。
- 如果ensure_ascii为True,所有的非ASCII字符都不能解析。
- 如果check_circular为false,转换时不再检查循环引用,如果出现循环引用,则抛出OverflowError错误。
- 如果allow_nan为false,当对象中有超出float范围的值时(nan, inf, -inf),会抛出ValueError错误。
- 如果indent是非负数,则打印时会有相应的缩进;如果是0或者负数,则没有缩进。
- 如果指定了separators,那么分隔符会使用指定的(item_separator, key_separator) ,默认为(‘, ‘, ‘: ‘)。
- 如果指定了default,default应该是一个返回可解码的JSON或抛出TypeError错误的函数。
- 如果sort_keys为true,则输出按键值的字典顺序排序。
dumps函数参数说明
dumps函数和dump函数的参数意义相同,唯一不同的是dumps函数输出结果是一个字符串。
Decode过程
Decode是把JSON对象转换成Python对象的过程。JSON对象和Python对象类型对应规则如下:
JSON | Python |
---|---|
object | dict |
array | list |
string | unicode |
number(int) | int,long |
number(real) | float |
true | True |
false | False |
null | None |
常用方法有:load和loads,它们的区别与dump和dumps之间的区别相同。
load函数参数说明
json.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
- fp必须是一个可读文件。
- encoding是decode过程的编码格式。
- object_hook是一个可选函数,如果解码结果为一个dict,则可以用object_hook代替dict
- parse_float,parse_int,parse_constant都是类型转换方法。
loads函数参数说明
json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
loads函数的参数意义与load相同。
第三方库Demjson
第三方库Demjson提供了encode和decode两个方法,用于JSON的编码和解码