2013-05-16 16 views
5

Bir http isteğinden urllib3 ile oluşturulan bir dizeyi dönüştürmeye çalışıyorum. aşağıdaki çalışırken ŞimdiDizeyi Python'da JSON'a dönüştürün mü?

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 

..., ben hem bir Dosya- gelen <type 'str'>

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

JSON'unuzda ek bir ayraç vardır. Bu kasıtlı mı? – Blender

+0

"String'i JSON'a dönüştür" derken ne demek istiyorsun? JSON _is_ bir dize biçimi. JSON'u uygun yerel Python nesnelerine dönüştürmek istiyorsunuz (bu durumda, bir dizgiyi diğerine eşleyen bir dict)? Ya da JSON dizgisine ait olmayan bazı JSON dizgisi veya başka bir şey var mı? – abarnert

+1

'tür (data.read())' 'data' bir dize ise çalışmaz. – Blender

cevap

18

json.load yükleri dönmek o hata ...

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

type(data) ve type(data.read()) Koşu olsun nesne gibi. Eğer requests kütüphane kullanırsanız, sadece yapabilirsiniz Ayrıca

json.load(request) 

: Bir dosya benzeri nesnedir istek üzerine json.load kullanmak sadece

json.loads(data) 

Veya: Ya json.loads kullanmak istiyorum :

import requests 

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

Ya da json.load (istek. json.loads (request.read()) 'içine oku())', 'json.load (request)' deyin. – abarnert

+0

@abarnert: Teşekkürler, düzenlenmiş. – Blender

+0

Şu anda yorumlanmış olsa da istek kitaplığını kullanıyorum. Çalıştırmama izin vermeyen Google Apps Engine üzerinde çalışıyorum ve urlfetch, aynı GET isteğinde sorun yaşıyordu. Yani, ham urllib3'ü destekliyorlar ve ben de test ettiğim şey bu. json.loads (request.data) 'wokring,' json.load (istek) 'değil. Yardım için teşekkürler. – bnlucas