2013-05-16 7 views
5

Ich versuche, eine Zeichenfolge zu konvertieren, die aus einer http-Anforderung mit urllib3 generiert wird.Konvertieren von Zeichenfolge in JSON in Python?

Traceback (most recent call last): 
    File "<pyshell#16>", line 1, in <module> 
    data = json.load(data) 
    File "C:\Python27\Lib\json\__init__.py", line 286, in load 
    return loads(fp.read(), 
AttributeError: 'str' object has no attribute 'read' 

>>> import urllib3 
>>> import json 
>>> request = #urllib3.request(method, url, fields=parameters) 
>>> data = request.data 

Nun ... Wenn die folgende versuchen, erhalte ich, dass Fehler ...

>>> json.load(data) # generates the error 
>>> json.load(request.read()) # generates the error 

Lauf type(data) und type(data.read()) beide Rück <type 'str'>

data = '{"subscriber":"0"}}\n' 
+2

Ihr JSON hat eine zusätzliche Halterung. Ist das beabsichtigt? – Blender

+0

Was meinst du "Zeichenfolge in JSON konvertieren"? JSON _ist_ ein String-Format. Sie möchten JSON in die entsprechenden nativen Python-Objekte konvertieren (in diesem Fall ein dict, das eine Zeichenfolge einer anderen zuordnet)? Oder eine Nicht-JSON-Zeichenfolge in eine JSON-Zeichenfolge oder etwas anderes? – abarnert

+1

'type (data.read())' sollte nicht funktionieren, wenn 'data' eine Zeichenkette ist. – Blender

Antwort

18

json.load Lasten von einem File- wie ein Objekt. Sie wollen entweder json.loads verwenden:

json.loads(data) 

Oder nur json.load auf Wunsch verwendet werden, die eine dateiähnliche Objekt ist:

json.load(request) 

Auch, wenn Sie die requests Bibliothek verwenden, können Sie einfach tun :

import requests 

json = requests.get(url).json() 
+0

Oder anstelle von 'json.load (Anfrage. read()) 'in' json.loads (request.read()) ', rufen Sie einfach' json.load (request) '. – abarnert

+0

@abarnert: Danke, bearbeitet. – Blender

+0

Ich verwende die Anforderungsbibliothek, obwohl sie momentan auskommentiert ist. Ich arbeitete an Google Apps Engine, das es mir nicht erlaubte, es auszuführen, und es gab Probleme mit der gleichen GET-Anfrage. Sie unterstützen also raw urllib3 und das ist es, womit ich teste. 'json.loads (request.data)' ist in Arbeit, 'json.load (request)' nicht. Danke für die Hilfe. – bnlucas