【问题标题】:Parse JSON data with varying parent keys using python使用 python 解析具有不同父键的 JSON 数据
【发布时间】:2023-03-30 14:09:01
【问题描述】:

这是我的工作示例

jsonData = {
    "3": {
        "map_id": "1",
        "marker_id": "3",
        "title": "Your title here",
        "address": "456 Example Ave",
        "desc": "Description",
        "pic": "",
        "icon": "",
        "linkd": "",
        "lat": "3.14",
        "lng": "-22.98",
        "anim": "0",
        "retina": "0",
        "category": "1",
        "infoopen": "0",
        "other_data": ["0"]
    },
    "4": {
        "map_id": "1",
        "marker_id": "4",
        "title": "Title of Place",
        "address": "123 Main St, City, State",
        "desc": "insert description",
        "pic": "",
        "icon": "",
        "linkd": "",
        "lat": "1.23",
        "lng": "-4.56",
        "anim": "0",
        "retina": "0",
        "category": "0",
        "infoopen": "0",
        "other_data": ["0"]
    }

我很难获得titleaddress 密钥。这是我尝试过的:

for each in testJson:
    print(each["title"])

我收到以下错误TypeError: string indices must be integers。我不明白为什么这不起作用。

我已经尝试了很多变体来获取关键数据,但我就是无法让它发挥作用。我也无法真正更改原始 JSON,因为我真正的 JSON 数据是一个巨大的文件。我在 stackoverflow 上查看了类似格式的 JSON 示例(例如,here),但结果很短。我认为我的 JSON 的格式化方式有问题,因为我之前用上面的代码解析过 JSON 没有任何问题。

【问题讨论】:

    标签: python json


    【解决方案1】:

    您收到该错误是因为您循环了没有titleaddress 属性的。这些属性存在于内部字典中,它们是字典的

    以下是您可以迭代 dict.values() 的方法:

    for value in jsonData.values():
        print(value["title"], value["address"])
    

    这会给你标题和地址:

    Your title here 456 Example Ave
    Title of Place 123 Main St, City, State
    

    如果你想找出你迭代的 key,你可以从 dict.items() 循环遍历元组 (key, value) 对:

    for key, value in jsonData.items():
        print(f"key = {key}, title = {value['title']}, address = {value['address']}")
    

    这将显示带有地址和标题的密钥:

    key = 3, title = Your title here, address = 456 Example Ave
    key = 4, title = Title of Place, address = 123 Main St, City, State
    

    【讨论】:

    • 感谢@RoadRunner,它有效!我没有看到 .values() 以这种方式与 JSON 数据一起使用,您的解释很有道理。真的很感激。
    【解决方案2】:

    for… in 循环遍历字典的,而不是它们的值。如果你想遍历它们的值,你可以使用.values()

    for value in someDict.values():
    

    …或者你可以遍历items(),它会给你一个元组的键和值:

    for key, value in someDict.items():
    

    您收到错误消息的原因是因为当您尝试从each 中获取title 时,each 实际上是关键,即。 "3""4"。 Python 将允许您从带有 someString[0] 之类的字符串中获取单个字符以获取第一个字符,但访问 someString['title'] 之类的内容没有意义。

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 2021-03-25
      • 2018-11-07
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 2011-07-08
      相关资源
      最近更新 更多