我有一个JSON文件,其中所有键都是数字。 这些数字是我拥有的键列表中正确键的索引。
JSON文件示例(请使用任何奇数格式,这是实际文件的简化版本):
{
"0": {
"1": [{
"2": 0,
"3": {
"4": "string"
},
"4": {
"5": 2,
"6": 1
}
}]
}
}
示例列表:
[a, b, c, d, e, f, g]
有没有一种方法可以用列表中的对应键替换这些键? (例如,键“ 0”将变为“ a”,键“ 1”将变为“ b”,依此类推。)
我可以使它仅对父键起作用,而不对任何嵌套键起作用。
感谢您的帮助。
答案 0 :(得分:2)
您可以编写一个递归函数,该函数先转换其参数,然后转换其嵌套值。
使用isinstance
来适当处理dict
和list
参数。其他值被视为“叶子节点”,并且未经修改就返回。
import pprint
obj = {
"0": {
"1": [{
"2": 0,
"3": {
"4": "string"
},
"4": {
"5": 2,
"6": 1
}
}]
}
}
keys = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
def transform(obj):
if isinstance(obj, list):
return [transform(element) for element in obj]
elif isinstance(obj, dict):
return {keys[int(key)]: transform(value) for key, value in obj.items()}
else:
return obj
print('Before:')
pprint.pprint(obj)
other = transform(obj)
print('After:')
pprint.pprint(other)