-1

我做了相当多的谷歌搜索,但没有为想要任意嵌套 JSON 的人找到合适的答案,例如从 API 响应中,并使用 Python 使用 HTML 将其显示为无序列表。

最终,这个问题通过一个相当短的递归函数得到了解决。

这是我正在处理的输入类型的示例:

{
  "_id": "61dc4e9130473a8465a11cd0",
  "index": 0,
  "guid": "a2a7e550-8bf4-4be5-b0e0-2b124a2ca7e1",
  "isActive": false,
  "balance": "$1,011.28",
  "picture": "http://placehold.it/32x32",
  "age": 25,
  "eyeColor": "green",
  "name": "Monique Dickerson",
  "gender": "female",
  "company": "AQUASURE",
  "about": "Dolore dolor excepteur tempor excepteur nulla occaecat Lorem dolor cillum sint velit. Minim labore irure ea anim duis in enim laboris. Aute amet ut sunt ea. Do irure sint commodo ea id. Amet dolore culpa anim irure ipsum est labore nostrud irure.\r\n",
  "registered": "2015-12-15T11:10:14 +05:00",
  "latitude": -63.913924,
  "longitude": -21.554531,
  "tags": [
    "eiusmod",
    "dolore",
    "pariatur",
    "in",
    "ipsum",
    "Lorem",
    "adipisicing"
  ]
}

这是所需的输出:

  • _id: 61dc4e9130473a8465a11cd0
  • 指数:0
  • 引导:a2a7e550-8bf4-4be5-b0e0-2b124a2ca7e1
  • isActive: 假
  • 余额:1,011.28 美元
  • 图片: http: //placehold.it/32x32
  • 年龄:25
  • 眼睛颜色:绿色
  • 姓名:莫妮克·迪克森
  • 性别女
  • 公司:AQUASURE
  • 关于: Dolore dolor excepteur tempor excepteur nulla occaecat Lorem dolor cillum sint velit。最小劳动 irure ea anim duis in enim labis。Aute amet ut sunt ea。做 irure sint commodo ea id。Amet dolore culpa anim irure ipsum est labore nostrud irure。\r\n
  • 注册时间:2015-12-15T11:10:14 +05:00
  • 纬度:-63.913924
  • 经度:-21.554531
  • 标签:
    • 厄斯莫德
    • 多洛尔
    • 偏执
    • ipsum
    • 洛雷姆
    • 消脂
4

1 回答 1

0

我能够用这段代码成功解决这个问题:

items = []
def render(json_data, v=""):
    if isinstance(json_data, dict):
        items.append(f"<ul>")
        for k2, v2 in json_data.items():
            render(k2 ,v2) # <---If we have a dict, apply function again
        items.append(f"</ul>")
    elif isinstance(v, dict):
        items.append(f"<li>{json_data}: <ul>")
        for k2, v2 in v.items():
            render(k2 ,v2) # <---If we have a dict, apply function again
        items.append("</ul></li>")
    elif isinstance(v, list):
        items.append(f"<li>{json_data}:<ul>")
        for i in v:
            if isinstance(i, str):
                items.append(f"<li>{i}</li>")
            elif isinstance(i, dict):
                render(i, v)
        items.append("</ul></li>")
    else:
        items.append(f"<li>{json_data}: {v}</li>")

render(data)
html_str = "".join(items)
html_str
于 2022-01-10T15:37:23.423 回答