2012-12-27 47 views
4

我向web2py服務器發送了一些jsonrpc請求,其中celery後端。有時候,我會收到我想分析的錯誤。錯誤來自jsonrpc答覆,因此不容易理解。我得到的是這樣的:任何巧妙的方法來從JSON字符串中取消數據?

{"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"}} 

我想是讓jsonrpc回覆的error.data部分,它UNESCAPE並將其顯示爲一個堆棧跟蹤。我可以手動執行(更改\" - >"並處理\n),但我想避免在這裏重新發明輪子。

+0

如果是JSON則該字符串應該「不包含這些額外的引號」獲取價值.. – 2012-12-27 10:42:39

+0

是答覆的文本之前運行它通過JSON解串器後,處理前它通過json解碼器。 – dangonfast

+0

所以:'deserilize(json)['error'] ['message']'?除非有充分的理由不對其進行反序列化,否則這將是 - 以一種明顯的非聰明方式 - 「避免重新發明輪子」。 – 2012-12-27 10:44:35

回答

3

這是原始未解析JSON?解析它作爲JSON:

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

+1如果沒有進一步限制,我首先反序列化JSON。 (JSON庫已經處理了所有「棘手」的規則。) – 2012-12-27 10:48:08

+0

沒錯,就是這樣! – dangonfast

-1

重新編輯:

用途:

所享有

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

unquote_plus

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

用於類似於HTTP的數據(即,百分比轉義)

看到這個問題和答案的更多信息:

Unescape Python Strings From HTTP

而且,對於UNESCAPE-ING定期轉義符號(即反斜槓),使用.decode()(對口。編碼())。見這些問題的答案:

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

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

+0

urllib(和那個鏈接的問題)處理URL /百分比編碼.. – 2012-12-27 10:43:41

+0

@pst:好吧,我明白了。所以你有unquote()代表百分比,decode()代表反斜槓。 – user1284631

+0

我意識到這只是json編碼的東西,與URL編碼無關。 – dangonfast