【问题标题】:Removing JSON property in array of objects删除对象数组中的 JSON 属性
【发布时间】:2013-10-03 19:20:01
【问题描述】:

我有一个在 Python 中清理的 JSON 数组。我想删除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 列表推导时,它返回一个空数组。我必须纠正什么才能使其正常工作?

【问题讨论】:

    标签: python json


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      如果不是所有元素都有imageData 键,那么使用del 将导致KeyError 异常。你可以通过使用pop 来防范这种情况:

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

      【讨论】:

        【解决方案3】:
        [ item for item in data if not item['imageData'] ]
        

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

        在每个item 上循环datedel item['imageData']

        【讨论】:

          【解决方案4】:

          怎么样:
          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'}

          【讨论】:

            猜你喜欢
            • 2019-03-11
            • 1970-01-01
            • 2016-11-21
            • 1970-01-01
            • 1970-01-01
            • 2013-08-10
            • 2019-09-15
            • 2013-05-05
            • 1970-01-01
            相关资源
            最近更新 更多