首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django REST框架如何在JSON响应中删除unicode前缀?

Django REST框架如何在JSON响应中删除unicode前缀?
EN

Stack Overflow用户
提问于 2015-12-08 10:34:37
回答 1查看 2K关注 0票数 1

这是我的模型:

代码语言:javascript
复制
class Question(models.Model):
    options = models.TextField()

以下是序列化程序:

代码语言:javascript
复制
class QuestionSerializer(ModelSerializer):
    class Meta:
        model = Question

以下是这样的观点:

代码语言:javascript
复制
class QuestionView(ListAPIView):
    queryset = Question.objects.all()
    renderer_classes = (JSONRenderer,) 
    serializer_class = QuestionSerializer

在数据库中,可用的记录如下所示:

代码语言:javascript
复制
id  options
1   [u'opt1', u'opt2']

当请求api时,以下是返回的JSON:

代码语言:javascript
复制
{
  "id": 1,
  "options": "[u'opt1', u'opt2']"
}

我的问题是如何保存JSON格式的字符串,并在没有unicode前缀的情况下以JSON格式检索它?(我需要支持unicode字符,因此不能简单地将用户提交的数据转换为字符串)

更新:这是我到目前为止找到的一个解决方案。使用詹戈-约翰逊菲尔德定义您的字段:

代码语言:javascript
复制
from jsonfield import JSONField

class Question(models.Model)
    options = JSONField()

然后,定义一个自定义序列化器字段:

代码语言:javascript
复制
from rest_framework import serializers

class JsonField(serializers.Field):
    def to_representation(self, value):
        return value

    def to_internal_value(self, data):
        return data

在序列化程序中使用此字段:

代码语言:javascript
复制
class QuestionSerializer(ModelSerializer):
    options = JsonField()

    class Meta:
        model = Question

现在,如果您试图存储并检索数据库中的记录,您应该得到一个JSON格式的字符串,而不带unicode前缀。

由于django-jsonfield正在寻找维护人员ATM,以防其过时,下面是我使用的版本:

  • Django 1.8.7
  • django-jsonfield 1.0.3
  • PostgresSQL 9.4.0.1
EN

回答 1

Stack Overflow用户

发布于 2015-12-08 10:55:21

在UTF-8中对unicode字符串进行编码。unicode前缀将消失,字符串仍然支持unicode字符:

代码语言:javascript
复制
>>> msg = u"Hello"

>>> msg = msg.encode("utf-8")

>>> msg

'Hello'

因为您需要转换一个dict中的所有值,所以您可能需要编写一个函数来实现这一点。但是这里已经处理好了:如何从Python中的JSON中获取字符串对象而不是Unicode对象?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34153602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档