[Python] Build a Tree based on a dictionary

Discussão em 'Python' iniciado por Stack, Setembro 5, 2025.

  1. Stack

    Stack Membro Participativo

    I am trying to build a Tree based on data to be found in a dictionary. I know that this could be achieved using recursion, but I am facing troubles solving this problem. The goal would be to construct a Tree in the form of:

    class Tree():
    def __init__(self, data) -> None:
    self.data = data
    self.children = []
    def addChildren(self, child):
    self.children.append(child)


    The following dictionary should be "parsed" and represented by a Tree.

    {
    "PaymentCoverageRequestResource":{
    "required":[
    "accountId",
    "paymentCoverageRequestId"
    ],
    "type":"object",
    "properties":{
    "paymentCoverageRequestId":{
    "maxLength":35,
    "type":"string",
    "description":"Identification of the payment Coverage Request"
    },
    "payee":{
    "maxLength":70,
    "type":"string",
    "description":"The merchant where the card is accepted as information to the PSU."
    },
    "instructedAmount":{
    "type":"object",
    "properties":{
    "amount":{
    "maxLength":70,
    "type":"string",
    "description":"The merchant where the card is accepted as information to the PSU."
    },
    "currency":{
    "maxLength":3,
    "type":"string",
    "description":"The merchant where the card is accepted as information to the PSU."
    }
    }
    },
    "accountId":{
    "$ref":"another reference"
    }
    },
    "description":"Payment coverage request structure.\nThe request must rely either on a cash account or a payment card.\nThe [instructedAmount] property is the payment account on wihich the request is processed. This amount must be positive.\nAmounts must always be set as positive values.\n",
    "example":"{\n \"paymentCoverageRequestId\" : \"MyCoverage123456\",\n \"instructedAmount\" : {\n \"amount\" : 12345.0,\n \"currency\" : \"EUR\"\n },\n \"accountId\" : {\n \"iban\" : \"YY13RDHN98392489481620896668799742\"\n }\n}",
    "x-definition-type":"Resources"
    }
    }


    A node is considered to be a parent-node, if and only if it contains the key-value pair


    "type":"object"
    ​

    Its children are all the key-value pairs found in "properties".

    I tried to solve this problem using the following code, but it am lacking some experience.

    def parse_json(requestBody : dict):
    def parse_json_rec(tree : Tree, requestBody : dict):
    #something ?
    if len(requestBody) == 0:
    return tree

    (k, v), = requestBody.items()
    requestBody.pop(k)
    print(k)

    if v['type'] == 'object': # OR ARRAY
    parent_node = Tree(k)
    print(v)
    return parse_json_rec(tree.addChildren(parse_json_rec(parent_node, v), requestBody))
    else:
    leaf_node = Tree(k)
    tree.addChildren(leaf_node)
    return parse_json_rec(tree, requestBody)
    pass
    root = Tree("root")
    return parse_json_rec(root, requestBody)


    The result I would like to achieve is a Tree containing multiple nodes as represented here:

    PaymentCoverageRequestResource
    paymentCoverageRequestId
    payee
    instructedAmount
    amount
    currency
    accountId

    Continue reading...

Compartilhe esta Página