2015-04-23 78 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做了编辑。它现在应该工作 –