【发布时间】: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