我刚刚从python 2.5迁移到python 2.7并用内置的json替换了simplejson。但现在我得到一个json错误“JSON.parse:期望的属性名称或'}'。”
返回的json是:
{
"stat" : "ok",
"code" : "200",
"message" : "Retrieved departments from account.",
"result" : [{"id": "5486563022602240", "name": "The
New Establishment"}, {"id": "6049512976023552",
"name": "Ye Olde Joynt"}]
}
似乎我可以在前端(JSON.parse: expected property name or '}')中进行一些字符串替换,但它不应该是我的服务,它会返回正确格式化的数据吗?我目前在python中生成数据如下:
def department_getlist(self):
self.message = 'Retrieved departments from account.'
results = []
for d in self.account.departments:
results.append({
'id': str(d.key().id()),
'name': d.name
})
self.result = json.dumps(results)
如何在python中生成数据,因此以正确的格式返回(如果是这样的话)?
感谢
托马斯
答案 0 :(得分:1)
我怀疑在某个地方,你要拨打json.dumps
两次而不是一次。
在department_getlist
功能中,您执行self.result = json.dumps(results)
。我猜其他地方,你做了一些事情:
message = {
"stat" : "ok",
"code" : "200",
"message" : "Retrieved departments from account.",
"result" : self.results
}
output = json.dumps(message)
如果是这样,您在json.dumps
变量上调用self.results
两次,并在第二次传递时转义引号。当您的前端Javascript解析并显示JSON时,它可能会将转义后的字符串显示为"
,而不是\"
。
尝试将department_getlist
函数中的行更改为self.result = results
,看看是否能解决问题。
答案 1 :(得分:1)
感谢Michael0x2a发表的评论,我回溯了我的代码并找到了解决方案 使用 我的json-template中的{%autoescape off%}:
{
"stat" : "{{ status }}",
"code" : "{{ code }}",
"message" : "{{ message }}"{% if result %},
"result" : {% autoescape off %}{{ result }}{% endautoescape %}{% endif %}
}