从对象数组中删除JSON属性

23

我在Python中有一个JSON数组需要清理,我想删除imageData属性:

data.json

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

我正在设置一个列表推导式来删除该属性,但我不确定如何创建一个专注于imageData的变量:

我正在设置一个列表推导式以删除该属性,但我不确定如何创建一个专注于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

当我打印列表推导式时,它返回一个空数组。为了使其正常工作,我需要做什么更正?

4个回答

39

一个简单的解决方案是使用del在原地删除不需要的键:

import json

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

你应该添加一些安全检查,但你已经有了这个想法。


18

如果并非所有元素都有imageData键,那么使用del将会引发KeyError异常。你可以通过使用默认值的方式使用pop来防范这种情况:

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

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

由于所有都有imageData,所以是空的。您只是在测试它,而不是删除它。

循环遍历date并在每个item上执行del item ['imageData']


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'}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接