django jsonresponse中的特殊字符(utf-8)

时间:2017-01-24 23:01:04

标签: json django utf-8 python-3.5

我在django中使用json响应,但我有特殊字符(ñáé等...)

我的观点

   def get_agencies(request):
        qr = Agency.objects.all()
        qr_jason = serializers.serialize('json',qr)
        return JsonResponse(qr_jason, safe=False)

但是如果我在json中输入一个像ñ这样的特殊字符,我会收到相同的ascii。实际上我可以创建一个字典,然后使用字典制作JasonResponse并且它可以工作,我找不到使用utf-8的serializers.serialize的方法。

json收到了(u00f1是ñ)

// 20170124165944
// http://localhost:8080/get_agencies/

"[
  {
    \"model\": \"items.agency\",
    \"pk\": 1,
    \"fields\": {
      \"name\": \"asdk\\u00f1ld\",
      \"tipo\": \"librevile\",
      \"adress\": \"laslkfdli323,
      ls\\u00f1\\u00f1\",
      \"phone\": \"56549875\",
      \"web\": \"http: //www.systmatic.com.mx\",
      \"lat\": 23.514646,
      \"lng\": -26.152684,
      \"created\": \"2017-01-24T00: 56: 28.302Z\",
      \"last_updated\": \"2017-01-24T22: 22: 08.856Z\"
    }
  }
]"

2 个答案:

答案 0 :(得分:3)

我知道你写过你想使用django.core.serializers.serialize序列化但是......你可以使用json标准库来解决方法和序列化。

import json

def get_agencies(request):
    qr = Agency.objects.all().values()
    qr_json = json.dumps(list(qr), ensure_ascii=False, default=str)
    return JsonResponse(qr_json, safe=False)

我已将default=str参数添加到json.dumps,因为我看到您的模型中有一个日期时间字段,因此应该处理该问题。

答案 1 :(得分:1)

更快的解决方案:

def get_agencies(request):
    qr = Agency.objects.all().values()
    qr_list = list(qr)
    return JsonResponse(qr_list, , safe=False, json_dumps_params={'ensure_ascii':False})