Python 如何拆分包含'_';进入子对象?
我有以下JSON对象,需要在其中对一些标签进行后期处理:Python 如何拆分包含'_';进入子对象?,python,json,Python,Json,我有以下JSON对象,需要在其中对一些标签进行后期处理: { 'id': '123', 'type': 'A', 'fields': { 'device_safety': { 'cost': 0.237, 'total': 22 }, 'device_unit_replacement': { 'cost': 0.262, 'total': 7
{
'id': '123',
'type': 'A',
'fields':
{
'device_safety':
{
'cost': 0.237,
'total': 22
},
'device_unit_replacement':
{
'cost': 0.262,
'total': 7
},
'software_generalinfo':
{
'cost': 3.6,
'total': 10
}
}
}
我需要按拆分标签名称以获得以下层次结构:
{
'id': '123',
'type': 'A',
'fields':
{
'device':
{
'safety':
{
'cost': 0.237,
'total': 22
},
'unit':
{
'replacement':
{
'cost': 0.262,
'total': 7
}
}
},
'software':
{
'generalinfo':
{
'cost': 3.6,
'total': 10
}
}
}
}
这是我当前的版本,但我陷入了困境,不知道如何处理字段的层次结构:
import json
json_object = json.load(raw_json)
newjson = {}
for x, y in json_object['fields'].items():
hierarchy = y.split("_")
if len(hierarchy) > 1:
for k in hierarchy:
newjson[k] = ????
newjson = json.dumps(newjson, indent = 4)
下面是一个递归函数,它将处理一个dict
并拆分键:
def splitkeys(dct):
if not isinstance(dct, dict):
return dct
new_dct = {}
for k, v in dct.items():
bits = k.split('_')
d = new_dct
for bit in bits[:-1]:
d = d.setdefault(bit, {})
d[bits[-1]] = splitkeys(v)
return new_dct
>>> splitkeys(json_object)
{'fields': {'device': {'safety': {'cost': 0.237, 'total': 22},
'unit': {'replacement': {'cost': 0.262, 'total': 7}}},
'software': {'generalinfo': {'cost': 3.6, 'total': 10}}},
'id': '123',
'type': 'A'}
如果你有{'A_B_C':{'D':0},'A_B':{'D':1}
?@RiccardoBucco:很好的观点。对于我的原始JSON文件,这种情况不会发生。