2011-07-01 426 views
0

我有以下形式的JSON:如何從Python中的JSON中刪除額外的方括號?

{"blah": 
[ 
    [ 
    {"first": 
    {"something":"that","something":"else","another":"thing","key":"value"}...[etc.] 
    } 
    ] 
] 
} 

,我試圖用Python進行解析。我已經導入JSON(或simplejson,這取決於你使用的是什麼版本的Python),一切都進行得很好,直到我得到這個塊:

for result in page['blah']: 
    that = result['first'] 
    a_list.append(that) 

會拋出錯誤「類型錯誤:列表索引必須是整數,而不是str「。

我敢肯定,這個錯誤是由於額外的一對方括號,使JSON裏面看起來像一個列表。

我的問題,假設是這種情況,是,我如何刪除它,仍然有有效的JSON解析爲字典?

歡迎使用其他解決方法。如果我需要提供更多信息,請告訴我。謝謝!

(添加缺少的括號和改變了一些容易混淆的名詞 - 我試圖拿出上飛通用術語,對不起任何混亂。)

+1

您似乎缺少一個大括號。 –

+0

你可以發佈完整的代碼,因爲正如Zhehao Mao所說,你似乎錯過了一條評論,並且很難判斷你的問題是來自於此還是來自其他方面...... – seb

回答

1

如果有永遠只有一個「額外」一組陣列括號:

for result in page['blah']: 
    that = result[0]['this'] 
    list.append(that) 
+0

Felix的回答正確地指出樣本結構與您的代碼示例不太匹配。如果你真的想要JSON對象的「內部」值,而不是最外面的大括號內的整個對象,那麼你需要做這樣的事情。 –

0

不需要從JSON字符串中刪除括號。我認爲確保只刪除權利是不值得的。只要找出正確的方式來訪問你想要的值。

「額外」括號不是唯一的問題。 this是一個對象的屬性,它是值爲first。所以訪問this,你必須寫

that = result[0]['first']['this'] 

這是否總是工作或不依賴於留出的JSON數據。

+0

啊,對不起,我正在動態地提供通用詞彙。你是絕對正確的,並且放心,我在實際的代碼中既不使用「this」也不使用「list」。 – Philoktetes

0

首先,您是對的 - 您的錯誤與Python數據類型和JSON輸出的錯誤使用有關。

其次,創建變量時不要使用list和所有其他Python保留字。

最後,如果你只是想獲得的所有結果「這個」內部密鑰,你可以嘗試使用下面的代碼:

data = {"blah": 
[ 
    [ 
    {"first": 
    {"this":"that", 
    "something":"else","another":"thing","key":"value"}} 
    ] 
] 
} 
outres = [] 
for k,v in data.items():#iterate over top dictionary('blah',....) 
    for sv in v: # iterate through first list 
     for tv in sv: # iterate through second list 
      for fk,fv in tv.iteritems(): # iterate through each dicionary from second list 
       if 'this' in fv: 
        outres.append(fv['this']) 
print outres 

請注意,我的例子是基於你的數據樣本 - 所以如果您的數據結構中有任何額外的級別,或者應該應用任何其他規則,那麼應修改代碼。