返回json而不返回&;引用;在迁移到python 2.7之后

返回json而不返回&;引用;在迁移到python 2.7之后,python,json,python-2.7,Python,Json,Python 2.7,我刚刚从Python2.5迁移到Python2.7,并用内置json替换了simplejson。但现在我得到了一个json错误“json.parse:预期的属性名或“}” 返回的json是: { "stat" : "ok", "code" : "200", "message" : "Retrieved departments from account.", "result" : [{"id": "54865630

我刚刚从Python2.5迁移到Python2.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"}]
}
似乎我可以在前端()中进行一些字符串替换,但它不应该是我的服务,它返回格式正确的数据吗?我目前在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生成数据,以便以正确的格式返回(如果是这样做的话)

谢谢


Thomas

我怀疑,在某个地方,您调用了
json.dumps
两次而不是一次

在您的
department\u getlist
函数中,您可以执行
self.result=json.dumps(results)
。我猜你在别的地方做了一些事情,结果是:

message = {
  "stat"    : "ok",
  "code"    : "200",
  "message" : "Retrieved departments from account.",
  "result"  : self.results
}

output = json.dumps(message)
如果是这样,您将对
self.results
变量调用
json.dumps
两次,并在第二次调用时转义引号。当前端Javascript解析并显示JSON时,它可能会在下面的某个位置将转义字符串显示为
,而不是
\”


尝试将
department\u getlist
函数中的行更改为
self.result=results
,看看这是否解决了问题。

多亏了Michael0x2a的评论,我追溯了我的代码,找到了解决方案 使用 {%autoescape off%}在我的json模板中:

{
  "stat"    : "{{ status }}",
  "code"    : "{{ code }}",
  "message" : "{{ message }}"{% if result %},
  "result"  : {% autoescape off %}{{ result }}{% endautoescape %}{% endif %}
}

您确定这是生成json的完整代码吗?在顶部返回的json中,我没有看到任何
id
name
键。@Michael0x2a您是对的。我更新了返回的json以显示正确的版本。另一个json来自另一个部分application@MichaelOx2a谢谢你的建议。它让我做了一个回溯来跟踪代码的执行。解决方案是在我的json模板中使用{%autoescape off%}:{“stat”:“{status}”,“code”:“{{code}”,“message”:“{{message}”{%if result%},“result”:{%autoescape off%}{result}{%endautoescape%}{%endif%}}@ThomasD-Ah。我想当时我完全错了:)。你应该考虑把你的解决方案作为一个新的答案,并接受它的未来任何人谁可能会有同样的问题。你的答案可能不完全正确,但你让我走在正确的路径:-我增加了一个简短的描述作为答案。再次感谢