如何自动填充json中的地址

问题描述 投票:0回答:1

这是我的json对象

[
  {
    "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"
      }
    ]
  }
]

我想创建以下 json,将地址字段动态添加到 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. 
python json python-3.x recursion iteration
1个回答
0
投票

我尽力解决了。看看这是否有帮助。

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(output)
© www.soinside.com 2019 - 2024. All rights reserved.