2016-09-07 97 views
0

我想把json放入數組中。 我有6個Json的鏈接(具有相同的大小,但不同的問題)Python Json到數組

這是我的嘗試:

data=('0','0') 
response = urllib.urlopen(URL) 
data[0] = json.loads(response.read()) 
response = urllib.urlopen(URL) 
data[1] = json.loads(response.read()) 

我必須初始化3D陣列? 後來這將是很好,如果我可以在結果這樣的工作:

result = data[0]['resu']['spc'] 

在我想建立一個for循環,其使用動態的JSON鏈接一樣,結束:

for w in range(0,len(URLs)): 
    URLs[w]['resu']['spc'] 
+0

'data'是kannot修改的元組。 – janbrohl

+0

這意味着它是不可能的? – nicoschuck

+0

否 - 你必須使用一個列表:它可以與'data = [0,0]'一起工作,而是看到我的答案以獲得更好的解決方案 – janbrohl

回答

0

我強烈建議使用requests(當前文檔中則不是如此),但你可以

import json 
import urllib2 

urls=["http://example.com/json","https://example.com/json2"] # your urls here 

data=[] 
for u in urls: 
    response = urllib2.urlopen(u) 
    data.append(json.loads(response.read())) # while this normally works with Python 2, it is better to use data.append(json.loads(response.read().decode("utf8")) 

因此你必須找出/猜測你的迴應的編碼。

隨着請求它就會簡單得多:

import requests 

urls=["http://example.com/json","https://example.com/json2"] # your urls here 
data=[requests.get(u).json() for u in urls] 
+0

我有同樣的想法,但對於轉換每個循環中的json url? – nicoschuck

+0

即時通訊不知道如果我正確理解你,但(除了使用append而不是像我的第二個代碼示例中的列表理解),perfoemance改進沒有太多空間 - 如果有多個url,那麼一個循環實際上是唯一的解決方案,除了對於'地圖' – janbrohl

0

元組是不可變的,這使得它們非常適合線程之間共享,但對於頻繁的變化不那麼好。嘗試使用列表來代替它,因爲它們是爲這個特殊用例設計的。話雖這麼說,一本字典可能是好的,以及:

import json 
import urllib.request 

data = {} 
for url in urls: 
    with urllib.request.urlopen(url) as response: 
     if response.status_code != 200: 
      continue // Handle errors here, I chose to continue 
     // Remember that JSON must be in text format 
     data[url] = json.loads(response.read().decode()) 

只是爲了笑聲,這裏是一個班輪:

// The lack of error checking in this is staggering though! 
data = {u:json.loads(urllib.request.urlopen(u).read().decode()) for u in urls} 
+0

好吧,這意味着我可以用我的所有數據構建一個數組,以便動態使用它們。這可能是一個解決方案。我會嘗試 – nicoschuck

+1

你實際上不能確定在沒有檢查標題的情況下采用哪種編碼進行解碼。使用'.decode()'使用默認編碼並不是最好的想法。 utf-8將是一個更好的猜測 - >'.decode(「utf-8」)' – janbrohl

+0

默認編碼是utf-8。 –