字典到JSON?

2024-05-17 15:12:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下字典:

terms = {"Taste Term":{'children': ['Receptor', 'Descriptor', 'Modulator', 'Tissue'], 'parent': []},"Receptor":{'children': ['ion channel'], 'parent': ['Taste Term']}, "Descriptor":{'children': [], 'parent': ['Taste Term']}, "Modulator":{'children': [], 'parent': ['Taste Term']},"Tissue":{'children': [], 'parent': ['Taste Term']}}

当我用print json.dumps(terms, indent=4)转储此词典时 我得到以下Json文件:

^{pr2}$

我想要的json文件如下所示:

{
"name":"Taste Term",
"children": [
 {
  "name":"Receptor",
  "children": [

     {"name":"ion channel"}
   ]
  },
  {"name":"Descriptor"},
  {"name":"Modulator"},
  {"name":"Tissue"}
 ]
 }

现在,如何编辑字典以获得Json的正确结构以输出较低的Json文件?所以我需要编辑字典terms,这样子字典中就有孩子了。在


Tags: 文件namejson字典channelparenttermchildren
1条回答
网友
1楼 · 发布于 2024-05-17 15:12:27

处理递归数据结构的最简单方法通常是使用递归函数。在这种情况下,可以编写一个将平面字典中的“节点”转换为所需的嵌套字典结构所需的类型。完成后,您只需json.dumps()将结果转换为JSON格式。在

在下面的代码中,我更正了问题中提供的起始terms字典的语法,并重新格式化了它,以清楚地显示其结构。在

import json

terms = {
     'root':      {'p': [],          'c': ['branch1', 'branch2', 'branch3']},
     'branch1':   {'p': ['root'],    'c': ['branch1.1']},
     'branch2':   {'p': ['root'],    'c': []},
     'branch3':   {'p': ['root'],    'c': []},
     'branch1.1': {'p': ['branch1'], 'c': []}
}

def transform(d, parent):
    return (
        {'name': parent}
            if not d[parent]['c'] else
        {'name': parent,
         'children': [transform(d, child) for child in d[parent]['c']]}
    )

print(json.dumps(transform(terms, 'root'), indent=2))

输出:

^{pr2}$

相关问题 更多 >