【问题标题】:Python: Recursive function to update dynamically generated nested json key valuePython:更新动态生成的嵌套json键值的递归函数
【发布时间】:2020-01-15 23:28:03
【问题描述】:

我正在尝试更新动态 json 键值。但我无法完成递归函数。我的 JSON 结构是

x = {
  "payload": {
    "name": "kabilan",
    "address": {
      "country": "value_to_change"
    }
  }
}

在上面的 json 中,“value_to_change”的路径是 ['payload']['address']['country'] 我将它存储为 db 中的“payload.address.country”。

这个嵌套的 json 结构是动态创建的,但我也知道关键路径。请找到我写的代码来改变它

y = "payload.address.country"
y1 = y.split('.')
for item in y1:
  if item == y1[-1]:
    x[item] = "india"
  else:
    x = x[item]
print(x)

此代码返回

"国家":"印度"

。但我希望输出为

{
  "payload": {
    "name": "kabilan",
    "address": {
      "country": "india"
    }
  }
}

我想我在这里缺少递归函数。但我对此感到困惑。请帮我解决这个问题。提前致谢

【问题讨论】:

标签: python json python-3.x recursive-datastructures


【解决方案1】:

简单地写一个函数:

def update_x_from_y(x, y):
    y = y.split('.')
    n = len(y)

    for idx, item in enumerate(y):
        if idx == n - 1:
            x[item] = "india"
        else:
            x = x[item]

x = {
    "payload": {
        "name": "kabilan",
        "address": {
            "country": "value_to_change"
        }
    }
}
y = "payload.address.country"

update_x_from_y(x, y)

print(x)

【讨论】:

    【解决方案2】:

    选择更能代表其所代表内容的变量名称。顺便说一句,x 是字典,而不是 JSON,它是数据结构的字符串表示形式。

    x = {
      "payload": {
        "name": "kabilan",
        "address": {
          "country": "value_to_change"
        }
      }
    }
    
    key_path = "payload.address.country"
    d = x
    keys = key_path.split('.')
    last_key = keys.pop()
    for key in keys:
        d = d[key]
    d[last_key] = "india"
    print(x)
    

    打印:

    {'payload': {'name': 'kabilan', 'address': {'country': 'india'}}}
    

    【讨论】:

      猜你喜欢
      • 2017-02-16
      • 2018-09-18
      • 2021-04-19
      • 2017-07-01
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      相关资源
      最近更新 更多