json的序列化和反序列化

在Django后端与微信前端交互时,后端传递的列表或字典数据经HttpResponse发送后会变成字符串,需用JSON处理。介绍了JSON对字典、列表、元组和文件的序列化与反序列化,如字典序列化是将dic转str,文件序列化用dump()写入内容。

在实现Django的后端和微信前端的交互过程中,后端传递的数据是一个列表或者字典格式,但是经过HttpResponse发送到网页或者微信小程序后端变成了字符串,这个时候需要用json来进行处理。

(1)对字典的序列化

序列化:把python的dic转化为str的类型的过程

反序列化:把str类型转化为python 的dic类型的过程

all_tickets = {'1':total_num,'2':sn_ticket_duty}
all_tickets = json.dump(all_tickets)
return HttpResponse(all_tickets)

网页端结果如下所示:

(2)json对列表的序列化和反序列化

列表的序列化和反序列化跟字典的原理相同

(3)json对元组的序列化和反序列化

元组序列化之后是字符串,但是反序列化之后却是列表

(4)json对文件的序列化和反序列化

序列化:把服务端的响应数据写入到文件中,是dump(),不是dumps()

json.dump(要写入的内容,文件名)

反序列化:读取文件的内容,是load(),不是loads()

 django提供的序列化

from django.http import JsonResponse
from django.shortcuts import render, HttpResponse
from django.core import serializers

user_obj = User.objects.filter(pk=id)
json_data = serializers.serialize('json', user_obj)
json_data = json.loads(json_data)
return JsonResponse(json_data, safe=False)
复杂的设计到分页的json序列化

from django.core.paginator import Paginator

def Article(request):
    	page_num = request.GET.get('page')
        row_num = request.GET.get('rows')
        print(page_num, row_num)
 

        rows = []
        chapter = Chapter.objects.all()
        all_page = Paginator(chapter, row_num)
        page = Paginator(chapter, row_num).page(page_num).object_list

        page_data = {
            "total": all_page.num_pages,
            "records": all_page.count,
            "page": page_num,
            "rows": rows
        }

        for i in page:
            rows.append(i)

        def myDefault(u):
            if isinstance(u, Chapter):
                return {'id': u.id,
                        'title': u.name,
                        'size': u.size,
                        'duration': u.duration,
                        'download_url': "不能下载",
                        "audiopath": str(u.audiopath)
                        }

        data = json.dumps(page_data, default=myDefault)

        return HttpResponse(data)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值