有什么聪明的方法可以从JSON字符串中取消数据?

时间:2012-12-27 10:37:06

标签: python celery web2py

我正在向jsonrpc服务器发送一些web2py个请求,并带有celery后端。有时候,我会收到我想要分析的错误。错误在jsonrpc回复中被转义,因此不容易理解。我得到这样的东西:

{"version": "1.1", "id": "ID4", "error": {"message": "TypeError: 'NoneType' object does not support item assignment", "code": 100, "data": ["  File \"/home/myuser1/tmp/web2py/gluon/tools.py\", line 4068, in serve_jsonrpc\n    s = methods[method](*params)\n", "  File \"/home/myuser1/tmp/web2py/applications/mycompany_portal/controllers/activity.py\", line 66, in get_cdr_page\n    invalidate_cache = pars['invalidate_cache'], use_long_polling = pars['use_long_polling'])\n", "  File \"/home/myuser1/projects/new-mycompany-portal/python_modules/pmq_client.py\", line 85, in get_page\n    res = result.get(timeout=10)\n", "  File \"/home/myuser1/.virtualenvs/python2.7.2-mycompany1/lib/python2.7/site-packages/celery/result.py\", line 119, in get\n    interval=interval)\n", "  File \"/home/myuser1/.virtualenvs/python2.7.2-mycompany1/lib/python2.7/site-packages/celery/backends/amqp.py\", line 138, in wait_for\n    raise self.exception_to_python(meta['result'])\n"], "name": "JSONRPCError"}}

我想要的是获取error.data回复的jsonrpc部分,取消它并将其显示为堆栈跟踪。我可以手动执行此操作(更改\" - > "并处理\n),但我想避免在这里重新发明轮子。

2 个答案:

答案 0 :(得分:3)

这是原始未解析的JSON吗?将其解析为JSON:

import json
print ''.join(json.loads(yourstring)['error']['data'])

答案 1 :(得分:0)

重新编辑:

使用:

引文结束

http://docs.python.org/2/library/urllib.html#urllib.unquote

unquote_plus

http://docs.python.org/2/library/urllib.html#urllib.unquote_plus

用于unescape-in​​g类似HTTP的数据(即百分比转义)

有关详细信息,请参阅此问题和答案:

Unescape Python Strings From HTTP

并且,对于unescapeing常规转义符号(即反斜杠),请使用.decode()(.encode()的对应项)。看到这些答案:

https://stackoverflow.com/a/10944959/1284631

https://stackoverflow.com/a/9340191/1284631