删除子json对象python

2024-05-18 08:34:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中有一个来自服务的动态json(数据),该服务还为我提供了一个动态字符串datakeytodele,我将在其中删除对象

对于示例1,假设数据值是否如下所示

{
  "categories": {
    "attributes": {
      "Alcohol": "full_bar",
      "Noise Level": "average",
      "Music": {
        "dj": false
      },
      "Attire": "casual",
      "Ambience": {
        "romantic": false,
        "intimate": false,
        "touristy": false,
        "hipster": false
      }
    }
  }
}

这意味着它应该删除属性下的环境对象,实际结果应该是

^{pr2}$

但是如何使用python从dynamickeytodele以编程方式创建上述删除操作

有谁能帮我一下吗


Tags: 数据对象字符串jsonfalse示例bar动态
2条回答

snap shot 请试试这个。在

def deleteKey(data,keyList): if len(keyList) > 1: data[keyList[0]] = deleteKey(data[keyList[0]],keyList[1:]) else: del data[keyList[0]] return data deleteKey(data,keyToDelete.split("."))

其思想是遍历字典并删除找到的键。下面是一个例子:

data = {
  "categories": {
    "imageData": {
      "Alcohol": "xyz123",
      "Noise Level": "average",
      "Music": {
        "dj": False
      },
      "Attire": "casual"
    }
  }
}

for toDelete in ['categories.imageData.Music.dj', 'categories.imageData.Attire']:
    # find keys
    path = toDelete.split('.')
    # remember last item. 
    # It is important to understand that stored value is a reference.
    # so when you delete the object by its key, you are modifying a referenced dictionary/object.
    item = data

    # iterate through all items except last one 
    # we want to delete the 'dj', not 'False' which is its value 
    for key in path[:-1]:
        item = item[key]

    del item[path[-1]]

print data

结果

^{pr2}$

相关问题 更多 >