json相关

json

JSON数据类型和python数据类型的对比

在python中使用json.dumps()将内存中的数据序列化为json格式的字符串,此时如果将这个数据发给其他语言使用,

其他语言利用JSON.parse()进行逆序列化,转化为原来的形式,在JSON中字典对应的类型为obkect类型,所以逆序列化后为object类型

每种语言都有自己的json模块,这样做的目的就是,方便各种语言见数据的交互

img

在python中 json.dumps()无法序列化datetime,date类型的数据,那该怎么办呢?

使用下述方法可以完成对含有date和datetime类型的数据的序列化

import json
from datetime import datetime,date
#对含有j日期类型的数据进行json类型转化
class JsonCustomEncoder(json.JSONEncoder):
#filleld为需要序列化的那个数据里面的每一项数据
    def default(self, field):
        if isinstance(field,datetime):
            return field.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(field,date):
            return field.strftime('%Y-%m-%d')
        else:
            return json.JSONEncoder.default(self,field)
            #其它类型的数据则使用父类中中的dafault方法进行序列化

d={'name':'chao','birthday':datetime.now()}
print(d)
#{'name': 'chao', 'birthday': datetime.datetime(2021, 6, 1, 20, 47, 0, 766203)}
json_str=json.dumps(d,cls=JsonCustomEncoder)#在序列化的时候使用我指定的那个类
print(json_str)
#{"name": "chao", "birthday": "2021-06-01 20:47:00"}

DjangoRestFramework里面有个功能,专门做接口用的,里面有个内置的序列化器,那个序列化器非常强大,


Django1.x版本在接收请求消息时,只能解析urlencoded, formdata格式的数据类型,在ajax中只要没指定content_type类型,默认是urlencoded类型(a=1&b=2),无法解析application/json格式的数据类型,但Django3.2好像可以解析json格式的

在项目中,你会发现,80%从前端拿到的数据时json数据,但django还解析不了。怎么办呢?自己写方法自己解析。或者使用djangorestframework这个第三方模块解析

所以请求头Headers里的键值对也是很有用的,如键Content-Type,django会根据不同的数据类型,使用不同的方法,进行解析

posted @ 2021-06-01 20:52  Jack_Gao  阅读(95)  评论(0)    收藏  举报