【问题标题】:How to append to the child node in JSON at every iteration using python provided new child node exists?如果存在新的子节点,如何使用 python 在每次迭代中附加到 JSON 中的子节点?
【发布时间】:2025-12-03 12:25:01
【问题描述】:

示例

template = {
    "Table": [
        {
            "level": 2,
            "value": {
                "element Name": "",
                "add Row": "False",
                "cost Type": "",
                "flag": "flag",
                "cost": "",
                "actions": "True"
            },
            "RHS": {},
            "children": [
                {
                    "level": 3,
                    "value": {
                        "element Name": "",
                        "add Row": "False",
                        "cost Type": "",
                        "cost": "",
                        "actions": "True"
                    },
                    "RHS": {},
                    "children": []
                }
            ]
        }
    ]
}

考虑到上面的字典,我想追加到最后一个“孩子”,并且每次循环运行时,它都应该追加到上一次迭代中创建的孩子。 循环 1: “孩子们”:{ “级别”:4, “值”:{“元素名称”:“”, “添加行”:“假”, “成本类型”:“”, “成本”: ””, “行动”:“真”}, “右轴”:{}, “孩子们”: [] }


循环 2:

迭代 2 “孩子们”:{ “级别”:5, “值”:{“元素名称”:“”, “添加行”:“假”, “成本类型”:“”, “成本”: ””, “行动”:“真”}, “右轴”:{}, “孩子们”: [] }


等等。

我的代码是:

循环的 Python 代码

for _ in range(sublevels):
    number = number + 1
    child = {"level": sublevels + 2,
                     "value": {"element Name": "", "add Row": False,
                               "cost Type": "", "cost": "",
                               "actions": True}, "RHS": {}, "children": []}
    template['Table'][0]['children'].append(child)

输出: 迭代后,JSON 应如下所示

{
    "Table": [
        {
            "level": 2,
            "value": {
                "element Name": "",
                "add Row": "False",
                "cost Type": "",
                "flag": "flag",
                "cost": "",
                "actions": "True"
            },
            "RHS": {},
            "children": [
                {
                    "level": 3,
                    "value": {
                        "element Name": "",
                        "add Row": "False",
                        "cost Type": "",
                        "cost": "",
                        "actions": "True"
                    },
                    "RHS": {},
                    "children": [
                        [
                            {
                                "level": 4,
                                "value": {
                                    "element Name": "",
                                    "add Row": "False",
                                    "cost Type": "",
                                    "cost": "",
                                    "actions": "True"
                                },
                                "RHS": {},
                                "children": [
                                    [
                                        {
                                            "level": 5,
                                            "value": {
                                                "element Name": "",
                                                "add Row": "False",
                                                "cost Type": "",
                                                "cost": "",
                                                "actions": "True"
                                            },
                                            "RHS": {},
                                            "children": []
                                        }
                                    ]
                                ]
                            }
                        ]
                    ]
                }
            ]
        }
    ]
}

Iteration 1: template['Table'][0]['children']
Iteration 2: template['Table'][0]['children'][0]['children']
Iteration 3: template['Table'][0]['children'][0]['children'][0]['children']

【问题讨论】:

  • 如果您一直在使用template['Table'][0],那么将Table 作为列表有什么意义?另外,您的问题是如何将项目附加到“儿童”列表中,或者如何为每个子级别递归(ish)?
  • 我正在创建一个巨大的 json,需要在迭代 1 中附加到 template['Table'][0]['children'] 然后附加到 template['Table'][0] ['children'][0]['children'] 等等。
  • 所以,您希望更改对象的 deepest children 节点的内容。请查看*.com/questions/30928331/…,看看是否可以根据您的需要定制解决方案(帖子寻找最深的节点,您需要更改它以找到具有特定名称的最深节点)。

标签: python json python-3.x


【解决方案1】:
import json

template = {"Table": []}
sublevels = 5

for _ in range(sublevels):
    #number = number + 1
    child = {"level": _ + 2,
                     "value": {"element Name": "", "add Row": False,
                               "cost Type": "", "cost": "",
                               "actions": True}, "RHS": {}, "children": []}

    cur_path = "[0]['children']"*_

    if _ == 0:
        template['Table'].append(child)
    else:
        exec(f"template['Table']{cur_path}.append(child)")


print(json.dumps(template, indent = 2))

不是最漂亮的方式,你应该避免使用 exec,但我试图从 dict 调用 JSON 路径,但它不起作用,所以我使用了 exec。

这很好用并且可以嵌套它..

运行此代码得到的输出:

{
  "Table": [
    {
      "level": 2,
      "value": {
        "element Name": "",
        "add Row": false,
        "cost Type": "",
        "cost": "",
        "actions": true
      },
      "RHS": {},
      "children": [
        {
          "level": 3,
          "value": {
            "element Name": "",
            "add Row": false,
            "cost Type": "",
            "cost": "",
            "actions": true
          },
          "RHS": {},
          "children": [
            {
              "level": 4,
              "value": {
                "element Name": "",
                "add Row": false,
                "cost Type": "",
                "cost": "",
                "actions": true
              },
              "RHS": {},
              "children": [
                {
                  "level": 5,
                  "value": {
                    "element Name": "",
                    "add Row": false,
                    "cost Type": "",
                    "cost": "",
                    "actions": true
                  },
                  "RHS": {},
                  "children": [
                    {
                      "level": 6,
                      "value": {
                        "element Name": "",
                        "add Row": false,
                        "cost Type": "",
                        "cost": "",
                        "actions": true
                      },
                      "RHS": {},
                      "children": []
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

【讨论】:

    最近更新 更多