Python 的Json库用法详解

1. dumps() 方法:将 Python 对象编码成 JSON 字符串。

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, **kw)

参数介绍:

(1)ensure_ascii 参数:默认为True, 如果被设置为False, 则可以返回non-ASCII的字符串。

json_data = json.dumps(data_dict)
print(json_data)    # {"name": "\u5434\u6653\u5b87", "shares": 100, "price": 542.23}

json_data = json.dumps(data_dict, ensure_ascii=False)
print(json_data)    # {"name": "吴晓宇", "shares": 100, "price": 542.23}

(2)sort_keys 参数:默认为False,如果设置为True,则输出的字典会按照key的字典序升序排列。

json_data = json.dumps(data_dict, ensure_ascii=False, sort_keys=True)
print(json_data)

2. dump() 方法:用于写文件。

with open("json_dump_test.json", "w") as f:
    json.dump(data_dict, f, ensure_ascii=False)

3. loads() 方法:将已编码的 JSON 字符串解码为 Python 对象。

json_data = json.dumps(data_dict, ensure_ascii=False, sort_keys=True)
print(json_data)
print(json.loads(json_data))

4. load() 方法:对应dump()方法

with open("json_dump_test.json", "r") as f:
    json_data = json.load(f)
    print(json_data)

5. json.JSONEncoder 类

json 库支持下面这些类型转化为 json 的数据类型:

Python 类型Json 类型
dictobject
list, tuplearray
int, float number
Truetrue
Falsefalse
Nonenull

如果要调用 json 库转化除了上面类型以外的其他类型,则要重载 JSONEncoder.default() 方法,让 defalut() 返回一个可序列化地对象,否则会调用默认的 default() 方法,raise 一个 TypeError 。

在 JSONEncoder 不知道怎么去把一个数据转换成 json 字符串的时候,它就会去调用 default() 函数, 所以要重写这个函数来处理它本身不支持的数据类型,不然 default() 函数默认是直接抛异常的。

例如:

def default(self, o):
    try:
        iterable = iter(o)
    except TypeError:
        pass
    else:
        return list(iterable)
    # Let the base class default method raise the TypeError
    return JSONEncoder.default(self, o)

所以 可以继承 JSONEncoder 来处理 JSONEncoder 不能处理的数据类型。

json.dumps() 会调用 encoder.encode() 方法。

class mycls(object):
    def __str__(self):
        return "my cls object"

myobj = mycls()

from json.encoder import JSONEncoder
class myEncoder(JSONEncoder):
    def default(self, o):
        try:
            iterable = iter(o)  # 尝试是不是可以迭代的
        except TypeError:
            print("Not a Iterable object")
        else:
            return list(iterable)

# json_data = myEncoder(ensure_ascii=False).encode(data_dict)
# print(json_data)    # {"测试": "中文", "name": "吴晓宇", "shares": 100, "price": 542.23}

json_data2 = myEncoder(ensure_ascii=False).encode(myobj)
print(json_data2)

参考文档: https://docs.python.org/zh-cn/3.7/library/json.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值