J'envoie des demandes jsonrpc
à un serveur web2py
, avec un backend celery
. Parfois, j'obtiens des erreurs que je veux analyser. Les erreurs se sont échappées dans la réponse jsonrpc
, donc ils ne sont pas faciles à comprendre. Je reçois quelque chose comme ceci:Une manière intelligente d'annuler les données de la chaîne 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"}}
Ce que je veux est d'obtenir la error.data
partie de la réponse jsonrpc
, unescape et l'afficher comme un stacktrace. Je peux le faire manuellement (changer \"
->"
et traiter le \n
), mais je voudrais éviter de réinventer la roue ici.
Si tel est le JSON, la chaîne doit « pas contenir ces citations supplémentaires » après l'exécution à travers un désérialiseur JSON avant d'extraire la valeur .. –
qui est le texte de la réponse, avant le traitement à travers le décodeur JSON. – dangonfast
Donc: 'deserilize (json) ['erreur'] ['message']'? À moins qu'il y ait une bonne raison de ne pas le désérialiser, ce serait comme cela - de façon évidente et non intelligente - «éviter de réinventer la roue». –