Home > Backend Development > Python Tutorial > How to autofill address in json

How to autofill address in json

PHPz
Release: 2024-02-05 22:30:07
forward
1271 people have browsed it

How to autofill address in json

Question content

This is my json object

[
  {
    "person": "abc",
    "city": "united states",
    "facebooklink": "link",
    "united states": [
      {
        "person": "cdf",
        "city": "ohio",
        "facebooklink": "link",
        "ohio": [
          {
            "person": "efg",
            "city": "clevland",
            "facebooklink": "link",
            "clevland": [
              {
                "person": "jkl",
                "city": "street a",
                "facebooklink": "link",
                "street a": [
                  {
                    "person": "jkl",
                    "city": "house 1",
                    "facebooklink": "link"
                  }
                ]
              }
            ]
          },
          {
            "person": "ghi",
            "city": "columbus",
            "facebooklink": "link"
          }
        ]
      },
      {
        "person": "abc",
        "city": "washington",
        "facebooklink": "link"
      }
    ]
  }
]
Copy after login

I want to create the following json to dynamically add the address field to the json.

[
  {
    "person": "abc",
    "city": "united states",
    "facebooklink": "link",
    "address": "united states",
    "united states": [
      {
        "person": "cdf",
        "city": "ohio",
        "facebooklink": "link",
        "address": "united states/ohio",
        "ohio": [
          {
            "person": "efg",
            "city": "clevland",
            "facebooklink": "link",
            "address": "united states/ohio/clevland",
            "clevland": [
              {
                "person": "jkl",
                "city": "Street A",
                "facebooklink": "link",
                "address": "united states/ohio/clevland/Street A",
                "Street A": [
                  {
                    "person": "jkl",
                    "city": "House 1",
                    "facebooklink": "link",
                    "address": "united states/ohio/clevland/Street A/House 1"
                  }
                ]
              }
            ]
          },
          {
            "person": "ghi",
            "city": "columbus",
            "facebooklink": "link",
            "address": "united states/ohio/columbus"
          }
        ]
      },
      {
        "person": "abc",
        "city": "washington",
        "facebooklink": "link",
        "address": "united states/washington"
      }
    ]
  }
]
``

How can I achieve this in Python.
Copy after login


Correct answer


I have tried my best to solve it. See if this helps. Write code in short json. But you can use full nested json as input.

# import json

given_data = [
  {
    "person": "abc",
    "city": "united states",
    "facebooklink": "link",
    "united states": [
      {
        "person": "cdf",
        "city": "ohio",
        "facebooklink": "link"
      },
      {
        "person": "abc",
        "city": "washington",
        "facebooklink": "link"
      }
    ]
  }
]

PARENT_TOP = ""
city = "city"
address = 'address'

def update_address(parent_node, my_path=PARENT_TOP):
    if isinstance(parent_node, list):
        for child_node in parent_node:
            if isinstance(child_node, dict):
                city = child_node.get("city")
                new_path = f"{my_path}/{city}" if my_path else city
                child_node[address] = new_path
                grand_child = child_node.get(city)
                update_address(grand_child, new_path)
    elif isinstance(parent_node, dict):
        city = parent_node.get("city")
        new_path = f"{my_path}/{city}" if my_path else city
        parent_node[address] = new_path
        child = parent_node.get(city)
        update_address(child, new_path)
    else:
        pass

    return parent_node

if __name__ == '__main__':
    update_address(given_data)
    # output = json.dumps(json.loads(str(given_data)), indent=2)
    print(given_data)
Copy after login

The above is the detailed content of How to autofill address in json. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template