0

我刚刚从 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: 预期的属性名称或 '}'),但它不应该是我的服务,它返回正确格式的数据吗?我目前在 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 中生成数据,以便以正确的格式返回(如果这样做的话)?

谢谢

托马斯

4

2 回答 2

1

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

{
  "stat"    : "{{ status }}",
  "code"    : "{{ code }}",
  "message" : "{{ message }}"{% if result %},
  "result"  : {% autoescape off %}{{ result }}{% endautoescape %}{% endif %}
}
于 2013-10-09T19:56:36.677 回答
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.dumpsself.results变量两次,并在第二次传递时转义引号。当您的前端 Javascript 解析并显示 JSON 时,它可能会将转义的字符串显示为"下一行,而不是\".

尝试将department_getlist函数中的行更改为self.result = results,看看是否可以解决问题。

于 2013-10-09T15:25:02.100 回答