如何从(json序列化)字典列表中删除“u”前缀?

2024-04-29 20:20:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要去掉前缀“u”,因为我正在将这些json序列化列表传递到前端,并用javascript处理它们。Javascript无法理解这些“u”

代码如下:

context['list_of_dicts'] = serialize('json', my_list_of_dicts)
# this function is wrapped with a @json response decorator

@json_响应如下:

^{pr2}$

在前端,我得到一个错误:

Uncaught SyntaxError: Unexpected token u in JSON at position 0

这是因为“u”前缀没有被删除。如何删除“u”前缀以便前端可以解码JSON?在


Tags: of代码json列表序列化mycontextfunction
1条回答
网友
1楼 · 发布于 2024-04-29 20:20:00

您正在将数据序列化三次。首先是:

context['list_of_dicts'] = serialize('json', my_list_of_dicts)

再加上两倍:

^{pr2}$

这将对从view函数返回的str()表示进行编码,然后将其转换为JSON字符串文档。str()转换添加了u前缀;您正在序列化Unicode字符串对象文本:

>>> context = {}
>>> context['list_of_dicts'] = u'<Some JSON literal here, correctly encoded>'
>>> import json
>>> json.dumps(str(context))
'"{\'list_of_dicts\': u\'<Some JSON literal here, correctly encoded>\'}"'

您的装饰师还有几个问题:

  • 您使用的是一个blanket except处理程序,因此您将屏蔽第一次尝试用simplejson.dumps()序列化时抛出的任何错误。永远不要使用毯子except并使异常静音。你现在不知道哪里出了问题。另请参见Why is "except: pass" a bad programming practice?

  • 您似乎在将对象序列化到字典中;如果您想发回一个JSON对象,请先构造只由Python对象组成的对象,然后序列化整个对象。

  • 如果需要自定义序列化逻辑(如使用Django serialisation framework),请不要使用@json_response修饰符重新编码,或者至少返回一个HttpResponse实例,以避免再次序列化

相关问题 更多 >