2013-12-11 40 views
1

解析我試圖解析這個小JSON,我想借此數量:JSON與Python

{"nombre":18747}

我嘗試:

import urllib.request 
request = urllib.request.Request("http://myurl.com") 
response = urllib.request.urlopen(request) 
print (response.read().decode('utf-8')) //print -> {"nombre":18747} 

import json 
json = (response.read().decode('utf-8')) 
json.loads(json) 

但我有:

Traceback (most recent call last): 
    File "<pyshell#38>", line 1, in <module> 
    json.loads('json') 
AttributeError: 'str' object has no attribute 'loads' 

任何幫助?

回答

5

已經讀取網絡數據;你不能讀它兩次。並且您正在重寫json到網絡讀取數據,替換模塊引用。請勿使用json作爲參考!

刪除print聲明,使用data作爲字符串引用,它將起作用。

工作代碼:

import urllib.request 
import json 

request = urllib.request.Request("http://httpbin.org/get") 
response = urllib.request.urlopen(request) 
encoding = response.info().get_content_charset('utf8') 
data = json.loads(response.read().decode(encoding)) 

,我們還利用在響應任何charset參數,以確保我們使用正確的編解碼器的反應數據進行解碼。

對於上述http://httpbin.org/get的URL,這將產生:

{'args': {}, 'headers': {'Host': 'httpbin.org', 'Accept-Encoding': 'identity', 'Connection': 'close', 'User-Agent': 'Python-urllib/3.3'}, 'origin': '12.34.56.78', 'url': 'http://httpbin.org/get'} 
+0

是的,但我有這樣的:文件「C:\ Python33 \ lib \ json \ decoder.py」,行352,解碼 obj,結束= self.raw_decode(s,idx = _w(s,0)。 ()) TypeError:不能在類似字節的對象上使用字符串模式 – mpgn

+0

@Martialp:啊,我明白了;這改變了Python 3.我會更新。 –

+0

是的,現在我有:ValueError:沒有JSON對象可以被解碼 – mpgn

1

名的字符串不同,例如改爲:

json = (response.read().decode('utf-8')) 
json.loads(json) 

寫:

input = (response.read().decode('utf-8')) 
json.loads(input) 

隨着事情是這樣的目前在你的問題中,你正在用那個變量名覆蓋導入的json模塊是字符串。同時刪除打印語句。