是否可以从JSON对象中删除父层?例如,假设我有以下JSON对象:
{
"Hello": "World",
"Parent": {
"key1": "val1",
"key2": "val2",
"key3": {
"key3a": "val3a",
"key3b": "val3b"
},
"key4": "val4"
}
}
但是我想删除Parent
层,并让JSON对象读取如下:
{
"Hello": "World",
"key1": "val1",
"key2": "val2",
"key3": {
"key3a": "val3a",
"key3b": "val3b"
},
"key4": "val4"
}
有没有办法做到这一点?
我最好希望使用Python完成此操作,但是如果有人知道我愿意使用其他方法来完成此操作。
答案 0 :(得分:3)
尝试一下(字典合并,在Python 3.5中引入):
d = {**d.pop('Parent'), **d}
证明:
import json
d = {
"Hello": "World",
"Parent": {
"key1": "val1",
"key2": "val2",
"key3": {
"key3a": "val3a",
"key3b": "val3b"
},
"key4": "val4"
}
}
d = {**d.pop('Parent'), **d}
print(json.dumps(d, indent=2))
# {
# "key1": "val1",
# "key2": "val2",
# "key3": {
# "key3a": "val3a",
# "key3b": "val3b"
# },
# "key4": "val4",
# "Hello": "World"
# }
答案 1 :(得分:3)
使用dict.pop
和dict.update
可以很容易地完成操作:
import json
data = {
"Hello": "World",
"Parent": {
"key1": "val1",
"key2": "val2",
"key3": {
"key3a": "val3a",
"key3b": "val3b"
},
"key4": "val4"
}
}
data.update(data.pop("Parent"))
print(json.dumps(data, indent=4))
输出:
{ "Hello": "World", "key1": "val1", "key2": "val2", "key3": { "key3a": "val3a", "key3b": "val3b" }, "key4": "val4" }
这还具有一个优势,它几乎可以在任何版本的Python中使用。
答案 2 :(得分:0)
这可以通过复制字典,删除'Parent'
键,然后使用'Parent'
字典内容进行更新来实现。如果有任何同名键,则'Parent'
字典中的值将覆盖外部字典中的值。
def flatten_dict(data, key):
new_data = dict(data)
del new_data[key]
new_data.update(data[key])
return new_data
然后致电flatten_dict(data, 'Parent')
。这样会将结果作为新字典返回,而不会更改原始字典。