2015-04-23 80 views
0

我正在使用第三方API,它給了我JSON響應。空的JSON字符串爲空

樣本響應是

{ 
    "peopleList":[ 
     { 
     "name":"Jack", 
     "age":26, 
     "creditcard":"12335435345" 
     }, 
     { 
     "name":"Arya", 
     "age":22, 
     "creditcard":"" 
     }, 
     { 
     "name":"Rob", 
     "age":16, 
     "creditcard":"" 
     } 
    ], 
    "responseTime":0.02, 
    "error":"" 
} 

這裏empty string用來表示No Value,我認爲應該是零。
如何使用python將所有空字符串的值替換爲null?

編輯:
我使用Django的服務JSON我的iOS應用程序是在斯威夫特。因此,儘管python中的空字符串是錯誤的,但它並不快速。

甚至更​​好。如何刪除所有空字符串的鍵?

注:JSON的結構未知。

+1

你真的想這麼做嗎?爲什麼不利用[空字符串的虛假行爲](http://stackoverflow.com/questions/9573244/most-elegant-way-to-check-if-the-string-is-empty-in-python)?與'null' /'None'相同在Python中是虛假的。 –

+3

從JSON生產者的角度來看,這是非常糟糕的做法 - 如果沒有錯誤,請不要將其作爲關鍵字添加。除了Vineet的回答,你可以從字典中刪除該項目,而不是將其設置爲「無」,這使得你的意圖更清晰的恕我直言。 – wonderb0lt

+0

我編輯了我的答案。應該爲你工作。 –

回答

3
data = json.loads(**your raw json string**) 
nullify(data) 

def nullify(container) : 
for key in container: 
     if type(key) == list: 
       nullify(key) 
     elif type(key) == dict: 
       nullify(key) 
     elif type(container[key]) == dict or type(container[key]) == list: 
       nullify(container[key]) 
     elif container[key] == '': 
       container[key] = None 

我相信這應該適合你。另外,Python中沒有null。相反,您可以使用None

****** EDIT ******

要刪除鍵乾脆就必須使用container.pop(key,None)。然而,你不能在迭代過程中做到這一點,所以你必須將所有這些密鑰存儲在列表中,然後從字典中彈出它們。

+0

如果關鍵字不是整數,則您的方法失敗。如果容器[鍵] ==''第一個'if'子句失敗:'它給出'TypeError:列表索引必須是整數,而不是字典' – Kaunteya

+0

@Kaunteya做了編輯。它現在應該工作 –