用Python解析JSON数据

用Python解析JSON数据,python,json,google-app-engine,Python,Json,Google App Engine,我从GitHub webhook服务接收到一些数据。它包含有关存储库中最近提交的信息。我收到的字符串如下所示: payload = { "ref":"refs/heads/master","commits":[ {"added":[],"author":{"username":"myname","email":"my@email.com","name":"John Doe"},"timestamp":"2011-03-03T02:04:32-08:00","removed

我从GitHub webhook服务接收到一些数据。它包含有关存储库中最近提交的信息。我收到的字符串如下所示:

payload = {
    "ref":"refs/heads/master","commits":[
        {"added":[],"author":{"username":"myname","email":"my@email.com","name":"John Doe"},"timestamp":"2011-03-03T02:04:32-08:00","removed":[],"url":"https://github.com/repository/commit/3da6de4ae4550aa84ff16b9b52d8c5179e126dc5","message":"Setup some functions","modified":["apps/api/__init__.py","main.py","utils.py"],"id":"3da6de4ae4550aa84ff16b9b52d8c5179e126dc5"}
    ],
    "compare":"https://github.com/repository/compare/a270fe9...eb26a23","after":"eb26a2312e1955ccb2b7cb50d43682be87c30faa","repository":{"pushed_at":"2011/03/03 02:23:14 -0800","has_issues":true,"has_downloads":true,"url":"https://github.com/repository","watchers":1,"fork":false,"has_wiki":true,"private":false,"size":2248,"forks":1,"created_at":"2011/02/23 04:41:51 -0800","owner":{"email":"my@email.com","name":"john"},"name":"john","language":"Python","open_issues":0},"forced":false,"before":"a270fe954359caa323a9880afc3d6301055ea566"
}
删除该变量
payload=
并仅获取
{}
之间的数据的正确方法是什么,以便它是一个正确的JSON,我可以使用
simplejson
进行解析?现在我只使用
json\u data=json\u data.replace('payload=','')
。我不确定这样做是否正确。我怎样才能做得更好?谢谢

更新
我在GitHub支持板上发布了一个问题描述。

我将查找第一个{字符:

jsondata = jsondata[jsondata.index("{"):]

没有一个“对”方法,除非你想实现一个完整的JS解析器。也就是说,Thomas建议的解决方案更具通用性,例如,如果github决定更改文件格式,如果你在不同的数据源上使用它,那么就不太可能破坏文件。

也可能值得对github进行调试,以返回有效的JSON—这可能是一个错误r端。你是如何接收它的?它是在HTTP响应还是HTTP post中?GitHub向我在“设置”中提供的url发送一个post。如下所述:。因此,在我的问题中,它发送一个带有字符串的post。正如@Thomas所建议的,绝对值得窃听GitHub,因为他们在该页面上的任何示例中都没有变量的迹象。@Nick:嗯,事实上不是这里是。“这是作为一个POST发送的,带有一个参数:'payload'。事实上,它是作为HTTP表单发送的,所以正确的方法是这样处理它-我认为在
cgi
模块中有一些东西可以处理它。但这可能有些过分了。