python的json包解读

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)

这很省劲,不得不说。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值