美文网首页
json序列化

json序列化

作者: yepeng05 | 来源:发表于2018-10-25 17:05 被阅读0次

json 序列化

首先得强调的是 json 的两种格式

{key: value} : json 对象
[{}, {}, {}] : json 数组

Python 原始类型向 json 类型的转化情况如下:

Python 对象 json 对象
dict object
list、tuple array
str、 unicode string
int、 long、float number
True/False true/false
None null

json 知道如何处理 list、dict、tuple、string等对象,但它无法序列化它不知道的类型(比如date、datetime、Decimal、以及自定义的class等),如果需要序列化的话,那么就需要自定义序列化方法,例如自定义一个序列化 date/datetime/Decimal 类型的方法:

import json
from decimal import Decimal
from datetime import date, datetime

class CustomJSONEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(obj, date):
            return obj.strftime('%Y-%m-%d')
        elif isinstance(obj, Decimal):
            return float(obj)
        else:
            return json.JSONEncoder.default(self, obj)

那么在使用 json.dumps 序列化时只需要指定自定义的方法即可:

json.dumps(datalist, cls=CustomJSONEncoder)

json.dumps 与 flask 中的 jsonify 区别

1、在返回json接口数据时也可以考虑使用 json.dumps ,这个时候就是选择纯原生的写法(自己造轮子),需要自己处理的点就比较多

# 需要自己处理返回状态,类型等等
return json.dumps(data), 200, {"Content-Type":"application/json"}

2、jsonify 也是封装的 json.dumps ,只不过加了一些返回的类型,状态等等

# 传入dict形式
return jsonify({'name': name, 'words': words})

# 传入key=value形式的参数
jsonify(name=name,words=words)

相关文章

网友评论

      本文标题:json序列化

      本文链接:https://www.haomeiwen.com/subject/nfectqtx.html