需要将 JSON 重组为 Python 中的新结构。
例如:
{
'a' : 1,
'b' : 1,
'd' : {'d1' : '1', 'd2' : 2},
'm' : [
{'x' : 6, 'y' : 5, 'z' : {'foo' : 'foo1', 'bar' : 'bar1'} },
{'x' : 8, 'y' : 8, 'z' : {'foo' : 'foo2', 'bar' : 'bar2'} }
]
}
到
{
'new_a' : 1,
'new_d' : {'new_d1' : '1', 'new_d2' : 2},
'new_m' : [
{'new_x' : 6, 'new_z' : {'new_foo' : 'foo1', new_'bar : 'bar1'} },
{'new_x' : 8, 'new_z' : {'new_foo' : 'foo2', 'new_bar : 'bar2'} }
]
}
有一个旧JSON的新形式的想法
有没有更优雅的方式来做到这一点?
import json
new_data = {}
new_data['new_a'] = old_data['a']
new_data['new_d'] = {}
new_data['new_d']['new_d1'] = old_data['d']['d1']
new_data['new_d']['new_d2'] = old_data['d']['d2']
new_data['new_m'] = {}
new_m = []
for m in old_data:
new_m.append({'new_x' : m['x'], 'new_z' : {'new_foo' ....
最佳答案
您提到了结果代码必须删除“少数字段”的要求。使用处理字典和列表的递归循环,我们可以将所有键更改为 new_
并删除您指定的任何字段。
a = {
'a' : 1,
'b' : 1,
'd' : {'d1' : '1', 'd2' : 2},
'm' : [
{'x' : 6, 'y' : 5, 'z' : {'foo' : 'foo1', 'bar' : 'bar1'} },
{'x' : 8, 'y' : 8, 'z' : {'foo' : 'foo2', 'bar' : 'bar2'} }
]
}
def rename(dt):
ndt = {}
for k, v in dt.iteritems():
if k == 'y': # the keys that you wish to remove from the new dictionary
continue
if isinstance(v, dict):
ndt['new_' + k] = rename(v)
elif isinstance(v, list):
ndt['new_' + k] = [rename(x) for x in v]
else:
ndt['new_' + k] = v
return ndt
print rename(a) # your expected dictionary
如果需要进行任何结构重组(例如,您想将一个值移到其他地方,或者如果您不想遵循现有的命名约定),那么您现有的代码已经是最简洁的方法所以。
关于python - 重组 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851288/