如何从JSON递归地在Python中添加字典?

2024-09-28 03:12:55 发布

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

尊敬的Stackoverflow成员:

我有这个JSON数组,它由以下几项组成(基本上):

{
    {
        'Name': 'x',
        'Id': 'y',
        'Unsusedstuff' : 'unused',
        'Unsusedstuff2' : 'unused2',
        'Children': []
    },
    {   'Name' : 'xx',
        'Id': 'yy',
        'Unsusedstuff' : 'unused',
        'Unsusedstuff2' : 'unused2',
        'Children': [{
            'Name': 'xyx',
            'Id' : 'yxy',
            'Unsusedstuff' : 'unused',
            'Unsusedstuff2' : 'unused2',
            'Children: []
        }

你知道基本的想法了。我想用下面的代码在Python列表中模拟这个(只获取id、名称和结构):

^{pr2}$

但是,它似乎只返回第一个'root'和第一个嵌套文件夹,但并没有遍历它们。在

我怎样才能解决这个问题?在

您好

垫子


Tags: nameidjsonunused成员数组stackoverflowxx
3条回答

看看这个

def parseNames(col):
    for x in col:
        if(len(x['Children'])> 0):
            a = [{
                'Name' : x['Name'],
                'Id' : x['Id'],
                'Children' : x['Children'][0]['Children']
                }]
            parseNames(a)
        names.append({'Name' : x['Name'], 'Id' : x['Id']})
    return names

我得到的输出是

^{pr2}$

可以使用以下命令解析Json对象:

import json
response = json.loads(my_string)

{Json>现在每个对象都有一个

在我看来,你要把这个树转换成一个只有Id,Name和子节点的树。在这种情况下,我认为它是清理节点。在

要清理节点,请执行以下操作:

  1. 使用原始节点的名称和Id创建一个节点。在
  2. 将新节点的子节点设置为原始节点子节点的已清理版本。(这是递归调用。)

在代码中,这将是:

def clean_node(node):
    return {
        'Name': node['Name'],
        'Id': node['Id'],
        'Children': map(clean_node, node['Children']),
    }

>>> print map(clean_node, data)
[{'Name': 'x', 'Children': [], 'Id': 'y'}, {'Name': 'xx', 'Children': [{'Name': 'xyx', 'Children': [], 'Id': 'yxy'}], 'Id': 'yy'}]

我发现像这样分解递归问题比较容易——尝试使用全局变量会很快使简单的事情变得非常混乱。在

相关问题 更多 >

    热门问题