django序列化的几种方法 json

class LoginView(View):
    def get(self,request):
        出错
        publish_list = Publisher.objects.all()
        return HttpResponse(json.dumps(publish_list))#无法打印,返回值是一个querset对象
        #c出错
        publish_list = list(Publisher.objects.all())
        return HttpResponse(json.dumps(publish_list))  # 无法打印,返回值是一个querset对象
        第一种打印全部
        publish_list = list(Publisher.objects.all().values())
        return HttpResponse(json.dumps(publish_list)) #json.dumps()函数是将字典转化为字符串
        第二种打印指定的name和email
        publish_list = list(Publisher.objects.all().values("name","email"))
        return HttpResponse(json.dumps(publish_list))
        第三种
        publish_list = Publisher.objects.all()
        temp = []
        for publish in publish_list:
            temp.append({
                "name":publish.name,
                "email":publish.email}
            )
            return HttpResponse(json.dumps(temp))
        第四种
        from django.forms.models import model_to_dict
        publish_list = Publisher.objects.all()
        temp = []
        for publish in publish_list:
            temp.append(model_to_dict(publish))
            return HttpResponse(json.dumps(temp))  #如果用HttpResponse(json.dumps(temp))这个返回给前端的是一个json字符串,如果要用需转换成JSON对象,前端需要json.parse()
        第五种
        from django.core import serializers
        publish_list = Publisher.objects.all()
        ret = serializers.serialize("json",publish_list)  #转化成json字符串
        return HttpResponse(ret)

def json_test(request):
data = {"name": "小黑", "age": 18}
data2 = [11, 22, 33, 44]
# import json
# data_str = json.dumps(data2) # 把data字典,data2列表序列化成json格式的字符串
# return HttpResponse(data_str)

#如果用HttpResponse(json.dumps(temp))这个返回给前端的是一个json字符串,如果要用需转换成JSON对象,前端需要json.parse()
只要前端发送的是Ajax请求,后端返回给前端的数据最好是字典形式的,这样变成JSON对象的话,前端就可以像字典一样操作 
#JsonResponse中有contype application/json,返回给前端的是一个object对象,不用再转换,前端直接可以使用

from django.http import JsonResponse   

return JsonResponse(data2, safe=False)  #JsonResponse中有contype application/json,返回给前端的是一个object对象,不用再转换,直接可以使用
return JsonResponse(data2, safe=False) #JsonResponse只能序列化字典格式的,要想序列化列表,需加safe=False

import json

s = '{"name":"xiaohei","age": 18}'
# 把字符串反序列化成Python中的数据类型
ret = json.loads(s)
print(ret, type(ret)) #{'name': 'xiaohei', 'age': 18} <class 'dict'>

# 把字典序列化成JSON字符串
ret2 = json.dumps(ret)
print(ret2, type(ret2)) #{"name": "xiaohei", "age": 18} <class 'str'>

 

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
{#JSON字符串#}
{#JSON.parse(): 用于将一个 JSON 字符串或者后端传来的JSON字符串转换为 JavaScript 对象,这样就可以像字典一样操作#}
var s = '{"name":"jack"}';
var data = JSON.parse(s);

console.log(data);
{#object类型#}
console.log(typeof data);
console.log(data.name); #
{#像字典一样操作得到的值为jack#}
</script>
</head>
<body>

</body>
</html>
JSON.parse():   用于将一个 JSON 字符串或者后端传来的JSON字符串转换为 JavaScript 对象 
console.log(JSON.parse(
'{"name":"Yuan"}')); console.log(JSON.parse('{name:"Yuan"}')) ; // 错误 console.log(JSON.parse('[12,undefined]')) ; // 错误 JSON.stringify(): 用于将 JavaScript 值转换为 JSON 字符串。  eg: console.log(JSON.stringify({'name':"egon"})) ;
原文地址:https://www.cnblogs.com/chvv/p/9631760.html