【问题标题】:Removal of nested key value in JSON data移除 JSON 数据中的嵌套键值
【发布时间】:2021-02-17 18:03:17
【问题描述】:

我有一些 JSON 数据:

{
       "key1":"value1",
       "key2":"value2",
       "HTTP Method": "POST",
       "key3":{
          "key3_1":"value3_1",
          "key3_2":"value3_2",
          "key3_3":"value3_3",
          "key3_4":"value3_4",
          "key3_5":"value3_5",
          "key3_6":"value3_6",
          "key3_7":"value3_7"
       },
       "key4":{
          "Accept":[
             "*/*"
          ]
       }
}

我想在这里做两个操作:

  1. 删除了一些嵌套的键值对。
  2. 在嵌套值中,我需要将"value3_5" 之类的部分更改为"val****"

在第二种情况下,我可以使用以下逻辑:如果 s 是您的字符串,n 是未隐藏字符的数量:s[:n] + '*' * (len(s)-n)

我想做的就是:

{

       "key1":"value1",
       "key2":"value2",
       "httpMethod":"POST",
       "key3":{
          "key3_1":"value3_1",
          "key3_2":"val*****",
          "key3_5":"value3_5",
          "key3_7":"val*****"
       },
       "key4":{
          "Accept":[
             "*/*"
          ]
       }
    }

我在这里删除了一些嵌套的键值对,并将嵌套值更改为"value3_2""val*****"(第二部分已经完成。)

【问题讨论】:

    标签: python json python-3.x dictionary


    【解决方案1】:

    这里有两个函数来完成这些操作。第一个取 key/nested_key 名称并将其从数据中删除,而第二个取 key/suffix 并将其替换为星号:

    data = {
           "key1":"value1",
           "key2":"value2",
           "HTTP Method": "POST",
           "key3":{
              "key3_1":"value3_1",
              "key3_2":"value3_2",
              "key3_3":"value3_3",
              "key3_4":"value3_4",
              "key3_5":"value3_5",
              "key3_6":"value3_6",
              "key3_7":"value3_7"
           },
           "key4":{
              "Accept":[
                 "*/*"
              ]
           }
        }
    
    
    def remove_nested_key_pair(key_name, nested_key_name):
        global data
        # Remove by key_name and nested_key_name
        data[key_name].pop(nested_key_name, None)
    
        return data
    
    
    def replace_by_suffix(key_name, suffix):
        global data
        for i, v in data[key_name].items():
            # check whether suffix is at the end of any value
            # if yes replace it with 'val*****'
            if suffix == v[len(v) - 3:]:
                data[key_name][i] = 'val*****'
    
        return data
    

    所以当你像这样调用上面的函数时:

    data = remove_nested_key_pair('key3', 'key3_3')
    data = remove_nested_key_pair('key3', 'key3_4')
    data = remove_nested_key_pair('key3', 'key3_6')
    
    data = replace_by_suffix('key3', '3_2')
    data = replace_by_suffix('key3', '3_7')
    

    结果如下所示:

    {
        'key1': 'value1',
        'key2': 'value2',
        'HTTP Method': 'POST',
        'key3': {
            'key3_1': 'value3_1',
            'key3_2': 'val*****',
            'key3_5': 'value3_5',
            'key3_7': 'val*****'},
        'key4': {'Accept': ['*/*']}
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-19
      • 1970-01-01
      • 2020-03-15
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 2017-04-29
      • 2022-07-14
      相关资源
      最近更新 更多