用python迭代json

2024-09-29 21:46:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经学了几个月的python了,在我自己的项目上开始了几门在线课程。我发现了一个有趣的网站,它提供了json格式的数据,我使用urllib库导入,使用json库进行解析,并最终希望将其插入到mysql数据库中。这个项目的第一部分和最后一部分工作,但不是解析部分。这是完整json文件的一部分:

{
"total": 24555,
"results": {
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "geometry": null,
            "id": "556897c8b9a2143b1187cf79",
            "properties": {
                "Expedition": "okavango_15",
                "SpeciesName": "African Hoopoe",
                "Count": 1,
                "t_utc": 1325383950,
                "t_created": 1432917960.344582,
                "Member": "Maans",
                "Taxonomy": {
                    "Kingdom": "Animalia",
                    "Species": "Upupa epops",
                    "Family": "Upupidae",
                    "Genus": "Upupa",
                    "Phylum": "Chordata",
                    "Order": "Upupiformes",
                    "Class": "Aves"
                },
                "FeatureType": "sighting",
                "Images": [],
                "DateTime": "2012-01-01T04:12:30+0200",
                "EstimatedGeometry": null,
                "Behavior": "Flying",
                "Habitat": "Mioambo Woodland"
            }
        },
        {
            "type": "Feature",
            "geometry": null,
            "id": "556897b2b9a2143b1d14a807",
            "properties": {
                "Expedition": "okavango_15",
                "SpeciesName": "Peregrine Falcon",
                "Count": 1,
                "t_utc": 1325406263,
                "t_created": 1432917938.878641,
                "Member": "Maans",
                "Taxonomy": {
                    "Kingdom": "Animalia",
                    "Species": "Falco peregrinus",
                    "Family": "Falconidae",
                    "Genus": "Falco",
                    "Phylum": "Chordata",
                    "Order": "Falconiformes",
                    "Class": "Aves"
                },
                "FeatureType": "sighting",
                "Images": [],
                "DateTime": "2012-01-01T10:24:23+0200",
                "EstimatedGeometry": null,
                "Behavior": "Flying",
                "Habitat": "Mioambo Woodland"
            }
        },
        {
            "properties": {
                "SpeciesName": "Reed Cormorant",
                "Count": 1,
                "Accuracy": 8.0,
                "Expedition": "okavango_13",
                "t_created": 1430929467.352914,
                "Member": null,
                "FeatureType": "sighting",
                "Altitude": 973.2047942238661,
                "t_utc": 1378449600,
                "DateTime": "2013-09-06T08:40:00+0200",
                "Activity": "L",
                "SightingId": 0
            },
            "geometry": {
                "type": "Point",
                "coordinates": [
                    22.345429148371103,
                    -19.018043140479318
                ]
            },
            "id": "554a403bb9a21401a231284f",
            "type": "Feature"
        }
    ]
},
"resolution": "full",
"filter": {
    "FeatureType": "sighting"
},
"returned": 3,
"order": 1,
"limit": 3

}

为了解析json文件,我使用以下代码:

^{pr2}$

我想从中获取数据的级别是在“特征”中,它包含了动物目击事件,还有很多其他的关键字,如物种名称、时间戳、位置。不同的目击并不总是包含相同的键,例如位置并不总是存在的。我确实想通过观察来解析数据,因为我希望它是数据库中的一行。我可以通过使用这种代码调用每个单独的项来获取所需的每一位数据:

results = data["results"]

for item in results["features"]:
    value1 = item["id"]
    value2 = item["properties"]["t_created"]

但这使得我的代码非常长,我想应该更容易迭代。但是,我不能为每一个键/值得到结果。我使用了.get函数、.values等,但事实证明,并非json文件中的每个级别都是字典,而是列表。例如,如果我运行以下代码:

print type(data)
data2 = data["results"]
print type(data2)
data3 = data2["features"]
print type(data3)

我的结果是: 键入“dict” 键入“dict” 键入“list”

如何迭代原始json加载并通过观察解析数据?在


Tags: 文件数据代码idjsontypepropertiesnull
1条回答
网友
1楼 · 发布于 2024-09-29 21:46:29

我不明白您所说的“通过观察解析数据”是什么意思,但是下面的代码将迭代您的JSON。如果你调整你的问题,包括你想要的输出将给出的例子,我可以帮助更多。在

data = json.loads(json_data)


def iterate_item(item):
    result_str = ""
    if type(item) == dict:
        for key in item:
            result_str = result_str + key + ": " + iterate_item(item[key])
    elif type(item) == list:
        for i in item:
            result_str = result_str + iterate_item(i) + ", "
    else:
        if not item:
            item = "None"
        result_str = result_str + str(item) + ". "

    return result_str

for sighting in data["results"]["features"]:
    print iterate_item(sighting) + "\n\n"

相关问题 更多 >

    热门问题