删除对象数组中的JSON属性

时间:2013-10-03 19:20:02

标签: python json

我有一个JSON数组,我正在用Python清理它。我想删除imageData属性:

data.json

[{"title": "foo", "imageData": "xyz123"},
{"title": "bar", "imageData": "abc123"},
{"title": "baz", "imageData": "def456"}]

我正在设置列表解析以删除属性,但我不确定如何创建专注于imageData的变量:

import json

with open('data.json') as json_data:
    data = json.load(json_data)
    clean_data = [ item for item in data if not item['imageData'] ]
    # Write `clean_data` to new json file

当我print列表理解时,它返回一个空数组。我需要纠正什么才能使其正常工作?

4 个答案:

答案 0 :(得分:32)

解决您问题的一个简单方法是使用del删除不需要的密钥:

import json

with open('data.json') as json_data:
    data = json.load(json_data)
    for element in data: 
        del element['imageData'] 

你应该添加一些安全检查,但是你明白了。

答案 1 :(得分:16)

如果并非所有元素都有imageData密钥,则使用del会导致KeyError异常。您可以使用pop使用默认值来防范:

for item in data: 
    item.pop('image', None)

答案 2 :(得分:1)

[ item for item in data if not item['imageData'] ]

为空,因为所有都有imageData。您只是测试,而不是删除

在每个date上循环del item['imageData']item

答案 3 :(得分:1)

怎么样:
clean_data = [k:v for k,v in data.iteritems() if k != 'imageData']

如果你想要一本字典,或者字典表达/理解:
clean_data = {k:v for k,v in data.iteritems() if k != 'imageData'}