liv*_*v a 11 python django json
我有以下DJango视图
def company(request):
company_list = Company.objects.all()
output = serializers.serialize('json', company_list, fields=('name','phonenumber','email','companylogo'))
return HttpResponse(output, content_type="application/json")
Run Code Online (Sandbox Code Playgroud)
结果如下:
[{"pk": 1, "model": "test.company", "fields": {"companylogo": null, "phonenumber": "741.999.5554", "name": "Remax", "email": "home@remax.co.il"}}, {"pk": 4, "model": "test.company", "fields": {"companylogo": null, "phonenumber": "641-7778889", "name": "remixa", "email": "a@aa.com"}}, {"pk": 2, "model": "test.company", "fields": {"companylogo": null, "phonenumber": "658-2233444", "name": "remix", "email": "b@bbb.com"}}, {"pk": 7, "model": "test.company", "fields": {"companylogo": null, "phonenumber": "996-7778880", "name": "remix", "email": "a@aba.com"}}]
Run Code Online (Sandbox Code Playgroud)
我的问题:1.我可以控制字段的顺序2.我可以更改字段的名称3.我希望在浏览器中看到缩进的结果,而不是一条长行来看到这样的东西:
[
{
"pk": 1,
"model": "test.company",
"fields":
{
"companylogo": null,
"phonenumber": "741.999.5554",
"name": "Remax",
"email": "home@remax.co.il"
}
},
{
"pk": 4,
"model": "test.company",
"fields":
{
"companylogo": null,
"phonenumber": "641-7778889",
"name": "remixa",
"email": "a@aa.com"
}
},
....
}
Run Code Online (Sandbox Code Playgroud)
]
Hoh*_*eim 19
你可以用这种方式得到漂亮的格式:
return JsonResponse(your_json_dict, json_dumps_params={'indent': 2})
Run Code Online (Sandbox Code Playgroud)
Python(与Django无关,从2.6开始)有一个内置的json库,可以完成你需要的缩进.如果您正在寻找快速和脏的东西用于调试目的,您可以这样做:
from django.http import HttpResponse
from django.core import serializers
import json
def company(request, pretty=False):
company_list = Company.objects.all()
output = serializers.serialize('json', company_list, fields=('name','phonenumber','email','companylogo'))
if pretty:
output = json.dumps(json.loads(output), indent=4))
return HttpResponse(output, content_type="application/json")
Run Code Online (Sandbox Code Playgroud)
但如果Company模型很大,这就是性能问题.我建议采用Dan R的建议并使用浏览器插件来解析和渲染json或者提出其他一些客户端解决方案.我有一个脚本,它接受一个json文件,并完成与上面的代码完全相同的东西,读取json并打印出来indent=4.
至于排序输出,您可以在查询集上使用order_by方法:
def company(request):
company_list = Company.objects.order_by("sorting_field")
...
Run Code Online (Sandbox Code Playgroud)
如果您始终希望该模型按此方式排序,则可以使用排序元类选项:
class Company(models.Model):
class Meta:
ordering = ["sorting_field"]
...
Run Code Online (Sandbox Code Playgroud)
最后请注意,如果您打算使用Web服务公开您的模型,我强烈建议您查看tastypie.从长远来看,它可能对您有所帮助,因为它提供了许多其他方便的功能,有助于实现这一目标.
Sim*_*ser -3
JSON 没有缩进,它只是结构化数据。浏览器或其他工具可能会格式化 JSON,使其看起来不错,但默认情况下它不存在。它也不是 JSON 的一部分,因为格式只是它在屏幕上的外观。JSON 通常由其他代码或服务处理,因此它们不关心缩进,只要数据结构正确即可。
| 归档时间: |
|
| 查看次数: |
10734 次 |
| 最近记录: |