从复杂的json内容中获取值

2024-09-25 10:29:27 发布

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

因此,基本上我是在网上抓取一个网站,为此,我需要从复杂的json内容中获取所有位置的"id"

https://hilfe.diakonie.de/hilfe-vor-ort/marker-json.php?ersteller=&kategorie=0&text=&n=54.14365551060835&e=19.704533281249986&s=48.00384435890099&w=1.2035567187499874&zoom=20000

我尝试了dict.items方法,但我只得到了位于dict开头的2个值,然后是一个列表开头:

res = requests.get(url).json()

json_obj = res.items()

for key, value in json_obj:
    if key == "id":
        print(value)

json = {
    "count": 17652,
    "items": [
        {
            "lat": 51.17450581504055,
            "lng": 10.007757153036533,
            "count": 17652,
            "north": 54.1425475,
            "east": 15.0019,
            "south": 48.0039543,
            "west": 5.952813,
            "elements": [
                {
                    "id": "5836de61a581c245ae48806b",
                    "o": 'null'
                },
                {
                    "id": "5836de62a581c245ae48814b",
                    "o": 'null'
                },
                {
                    "id": "5836de57a581c245ae487944",
                    "o": 'null'
                },
                {
                    "id": "5836de64a581c245ae4882a8",
                    "o": 'null'
                },
                {
                    "id": "5836de54a581c245ae48772a",
                    "o": 'null'
                },
                {
                    "id": "5836de57a581c245ae487945",
                    "o": 'null'
                }
            ]
        }
    ]
}

Tags: keyhttpsidjsonobj内容value网站
2条回答

JSON由一个根字典和两个键值对组成。一个是count,它是一个整数,另一个是items,它映射到单个项的列表。此项是一个字典,它有几个键值对,其中一个是elements,这是一个字典列表,每个字典包含一个id

import requests

url = "https://hilfe.diakonie.de/hilfe-vor-ort/marker-json.php?ersteller=&kategorie=0&text=&n=54.14365551060835&e=19.704533281249986&s=48.00384435890099&w=1.2035567187499874&zoom=20000"

response = requests.get(url)
response.raise_for_status()

elements = response.json()["items"][0]["elements"]

# print only the first ten ids
for element in elements[:10]:
    print(element["id"])

输出:

5836de61a581c245ae48806b
5836de62a581c245ae48814b
5836de57a581c245ae487944
5836de64a581c245ae4882a8
5836de54a581c245ae48772a
5836de57a581c245ae487945
5836de61a581c245ae48806c
5836de64a581c245ae4882aa
5836de57a581c245ae487947
5836de62a581c245ae48814d
>>> 

同样的事情,但不同-使用operator.itemgetter

items = operator.itemgetter('items')
elements = operator.itemgetter('elements')
eyedees = operator.itemgetter('id')

data = elements(items(json)[0])
stuff = map(eyedees,data)
print(list(stuff))

使用问题示例中的json

相关问题 更多 >