Otrzymuję obiekt json ze zdalnego serwera i konwertuję go na ciąg pythonu w następujący sposób:
a = eval(response)
Czy jest to w jakiś sposób głupie, czy mam lepszą opcję?
Odpowiedzi:
13 dla odpowiedzi nr 1Za pomocą eval
nie jest dobrym sposobem na przetwarzanie JSON:
JSON nie jest nawet poprawnym Pythonem, z powodu
true
,false
, inull
.eval
wykona dowolny kod Pythona, więc jesteś na łasce złośliwego wtrysku kodu.
Użyj json
moduł dostępny w standardowej bibliotece:
import json
data = json.loads("[1, 2, 3]")
Jeśli używasz wersji Python starszej niż 2.6, musisz samodzielnie pobrać moduł. To jest nazwane simplejson
i może być pobrane z PyPi.
2 dla odpowiedzi nr 2
Tak, bardzo. Zamiast tego użyj dekodera json:
>>> from simplejson import loads
>>> loads(response)