2013-05-16 20 views
5

Próbuję przekonwertować ciąg, wygenerowany z żądania http za pomocą urllib3.Konwertuj ciąg znaków na JSON w języku 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 

teraz ... Gdy próbuje następujących, otrzymuję ten błąd ...

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

Running type(data) i type(data.read()) zarówno powrócić <type 'str'>

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

Twój JSON ma dodatkowy wspornik. Czy to jest zamierzone? – Blender

+0

Co masz na myśli "Konwertuj ciąg na JSON"? JSON _jest_ formatem ciągów. Chcesz przekonwertować JSON na odpowiednie natywne obiekty Pythona (w tym przypadku dyktuje mapowanie jednego ciągu znaków na inny)? Lub jakiś łańcuch inny niż JSON w łańcuchu JSON, czy coś innego? – abarnert

+1

'type (data.read())' nie powinno działać, jeśli 'data' jest łańcuchem. – Blender

Odpowiedz

18

json.load ładunki z Plik- jak obiekt. Albo chcesz użyć json.loads:

json.loads(data) 

lub po prostu użyć json.load na wniosek, który jest przedmiotem plikopodobnym:

json.load(request) 

Ponadto, jeśli użyć biblioteki requests, można po prostu zrobić :

import requests 

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

Lub, zamiast obracać 'json.load (request. read()) 'do' json.loads (request.read()) ', po prostu wywołaj' json.load (request) '. – abarnert

+0

@abarnert: Dzięki, edytowane. – Blender

+0

Używam biblioteki żądań, ale jest ona obecnie komentowana. Pracowałem w Google Apps Engine, który nie pozwalał mi go uruchomić, a w przypadku urloetch występowały problemy na tej samej prośbie GET. Obsługują więc surowe urllib3 i właśnie to testuję. 'json.loads (request.data)' is wokring, 'json.load (request)' does not. Dzięki za pomoc. – bnlucas