在没有“迁移到python 2.7之后”返回json

时间:2013-10-09 14:04:40

标签: python json python-2.7

我刚刚从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中生成数据,因此以正确的格式返回(如果是这样的话)?

感谢

托马斯

2 个答案:

答案 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 %}
}