【问题标题】:JSON Added to Database as UnicodeJSON 作为 Unicode 添加到数据库
【发布时间】:2017-03-22 09:38:30
【问题描述】:

我正在尝试将 JSON 请求保存为数据库中的字符串,但遇到了一些问题:出于某种原因,我的数据作为 Unicode 字符串保存到数据库中。我的意思是字符串被这样保存在数据库中:

[{u'content': u'Treehouse', u'name': u'opportunity_name'}, {u'content': u'Robert', u'name': u'user_firstname'}, {u'content': u'Warren', u'name': u'client_firstname'}, {u'content': u'Buffett', u'name': u'client_lastname'}, {u'content': u'Form ABC123', u'name': u'my_name'}]

什么时候他们应该是这样的(没有你的):

[{'content': 'Treehouse', 'name': 'opportunity_name'}, {'content': 'Robert'...

这是我的代码,在 views.py 中(其中的数据也可以打印为 unicode):

@csrf_exempt
def send_aggregate_list(request):
    if request.method == 'POST':
        data = json.loads(request.body)
        print 'data'
        # the output from this print statement is the same, with leading 'u's
        print data
        serializer = SendAggregateSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JSONResponse(data,status=201)

models.py:

class SendAggregate(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    is_sent = models.BooleanField(default=False)
    global_merge_vars = models.TextField()
    subject_merge_vars = models.TextField()
    to_email = models.CharField(max_length=256, blank=False)
    to_name = models.CharField(max_length=256, blank=False)
    template = models.ForeignKey(Template, on_delete=models.CASCADE, null=True, blank=True)

    def __str__(self):
        return str(self.pk)

serializers.py:

class SendAggregateSerializer(serializers.ModelSerializer):
    class Meta:
        model = SendAggregate
        fields = ('id', 'created', 'is_sent', 'to_email', 'to_name', 'global_merge_vars', 'subject_merge_vars', 'template')

如果有帮助,这里是 serializer.validated_data 的输出:

OrderedDict([(u'to_email', u'rob.grzesik@gmail.com'), (u'to_name', u'Recipient Name'), (u'global_merge_vars', u"[{u'content': u'Treehouse', u'name': u'opportunity_name'}, {u'content': u'Robert', u'name': u'user_firstname'}, {u'content': u'Warren', u'name': u'client_firstname'}, {u'content': u'Buffett', u'name': u'client_lastname'}, {u'content': u'Form ABC123', u'name': u'loan_task_subject'}]"), (u'subject_merge_vars', u'[]'), (u'template', <Template: my_name>)])

【问题讨论】:

  • 请将您保存json的代码添加到数据库中。
  • 为什么要显式加载 JSON 字符串?这就是序列化程序的作用。
  • JSON 是 unicode,但 django 和您的数据库可能对此没问题。这是django docs 所说的。
  • 您提供的“应该是”不是有效的 JSON,因为 JSON 使用双引号。您在数据库中看到的很可能是 python dict 的字符串表示形式。
  • @НазарТопольський - 他展示了 django 使用的数据的 python 表示形式,而不是 JSON 字符串或数据库中逐个字符的内容。

标签: python json django unicode


【解决方案1】:

找到了解决办法!只需切换到使用另一个 JSON 包:

import simplejson as json

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 2020-10-25
    • 2015-01-24
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多