python json包解读
dump()
首先看下包内函数的基本定义
def 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):
其中参数:
1.obj 需要操作的对象,一般为字典类型的参数
2.fp 文件指针,当对文件进行操作时,可以将字典转换成的json串转为字符串存入指定文件中,如下举例
fp = open("target.json","w+",encoding="utf-8")
data = {'name':'joker','age':21}
json.dump(data,fp,ensure_ascii=False)
3. skipkeys 如果为false,则不会对不是基本类型的key进行报错
4. ensure_ascii 默认为True,如果为False,则允许不是ascii码以外的编码进行json编码并存入到文件中,在json中存在中文时一定要为False
5. check_circular 默认为True,如果为false,则不进行json的循环引用检查,并不跳出overflowError的错误
6. allow_nan 默认为True,如果为False,则会严格遵循json的编码规则,当float超出范围时进行报错,而不是使用javascript中的(nan,inf,-inf)进行提换
7. indent 默认为None,如果为None,则会进行最紧凑打印,如果为0,则会插入换行符,为正数则会进行不同级别的打印
8. separators是一个元组,定义(item_separator,key_separator)两个分隔符,如果用字典默认就可以
9. sort_keys默认为False,如果为True,会根据key的值进行排序
10. 还涉及到一个jsonEncoder的知识,默认的jsonEncoder会将python对象转化为json中的以下对象:
+-------------------+---------------+
| Python | JSON |
+===================+===============+
| dict | object |
+-------------------+---------------+
| list, tuple | array |
+-------------------+---------------+
| str | string |
+-------------------+---------------+
| int, float | number |
+-------------------+---------------+
| True | true |
+-------------------+---------------+
| False | false |
+-------------------+---------------+
| None | null |
+-------------------+---------------+
dumps()
dumps()的用法和dump()基本一致,以下是包中函数定义:
def dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
default=None, sort_keys=False, **kw):
除了没有dump中的文件操作其他与dump参数完全一致,在不需要文件处理的时候使用较为方便。
load()
load()主要功能是将json文件中的内容转换为dict格式,函数定义如下:
def load(fp, *, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
1. fp 文件指针,不再过多解释
2. object_hook,object_pairs_hook,用于改变json返回值的类型,默认dict类型,如果需要更改需要定义新的解码器进行传入。(这里大多情况下用不到,因为获取dict后再进行类型转换也大同小异)
3. parse_float 默认为None,默认时相当于进行强制类型转换float(num_str),将json中的float类型转换为其他类型时,需要进行传入,如parse_float=Decimal.decimal等
4. parse_int 与parse_float相同原理。
loads()
本函数与load()也是紧密相关,只是差了fp这个参数
def loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
s一般为字符串,bytes、bytearray等形式,源代码非常有意思的是,load的代码就是基于loads进行实现,load的返回值如下
return loads(fp.read(),
cls=cls, object_hook=object_hook,
parse_float=parse_float, parse_int=parse_int,
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
这很省劲,不得不说。