2010-12-21 12 views
0

In meinem Projekt evaluiere ich eine JSON-Daten, um Informationen zu extrahieren. Der Code lautet wie folgt:Was kann anstelle eines Moduls verwendet werden?

conn = httplib.HTTPConnection(host) 
conn.request("GET", "/done_json.php") 
r = conn.getresponse() 
data = r.read() 
tmp = ast.literal_eval(data) 
list = [] 
for a in tmp.keys(): 
    list.append(tmp[a]) 

Wie kann ich dies ändern, um Python 2.4 kompatibel zu sein?


Probe meiner json:

{'key_64': {'size3': 'CNDCRNCDF3FY09XL7UUBCBCPTYE4H7YBG1I5MILNBW172BMHVI.png', 'id': 'CNDCRNCDF3FY09XL7UUBCBCPTYE4H7YBG1I5MILNBW172BMHVI', 'size2': '', 'size1': 'http://dev.geco.com/site/2/CNDCRNCDF3FY09XL7UUBCBCPTYE4H7YBG1I5MILNBW172BMHVI.png'}, 'key_65': {'size3': 'CNDCRNEHLW2XFFCC90PDE77EEJHJF6RC3R8PEVUACB0C34H330.png', 'id': 'CNDCRNEHLW2XFFCC90PDE77EEJHJF6RC3R8PEVUACB0C34H330' (...)

Antwort

3

nicht ast.literal_eval Verwenden Sie, es ist die falsche Sache für den Job sowieso. Verwenden Sie simplejson.load(r) (oder das Standard-json-Modul anstelle von simplejson in neueren Versionen).

ast.literal_eval dient zur Auswertung von Python-Literalen. JSON ist meistens dasselbe, aber nicht vollständig (true/false/null anstelle von True/False/None).

+0

Problem ist, dass der zurückgegebene JSON eine Zeichenfolge ist. Wenn json.load (data) ausgeführt wird, bedeutet dies: 'AttributeError: 'str' Objekt hat kein Attribut 'read''. – DevAno1

+1

Sie verwenden 'json.load (r)' mit dem Objekt r (response), das über eine read-Methode verfügt. Oder Sie können 'json.loads (data)' (notieren Sie die s), wenn Sie wirklich die Zeichenfolge separat erhalten müssen. –

+0

simplejson.loads (Daten) gibt dies im Gegenteil: 'ValueError: Expecting Name der Eigenschaft: Zeile 1 Spalte 2 (char 2)' – DevAno1

Verwandte Themen