【问题标题】:Special character (utf-8) in a django jsonresponsedjango jsonresponse 中的特殊字符(utf-8)
【发布时间】:2017-06-09 23:29:54
【问题描述】:

我在 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 并且它可以工作,我找不到将 serializers.serialize 与 utf-8 一起使用的方法。

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\"
    }
  }
]"

【问题讨论】:

    标签: json django utf-8 python-3.5


    【解决方案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})
    

    【讨论】:

      【解决方案2】:

      我知道您写过您想使用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,因为我看到您的模型中有一个日期时间字段,因此应该解决这个问题。

      【讨论】:

      • 是的,这行得通,也可以使用字典,使用 object.__dict__ 方法(​​现在我实际上正在使用这个解决方案)。我只是想知道是否有某种方法可以将 serializers.serialize 与特殊字符一起使用。
      猜你喜欢
      • 2015-01-15
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 2012-01-11
      相关资源
      最近更新 更多