无法访问我的json d的特定字符串索引

2024-09-30 20:28:24 发布

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

我正在制作一个程序,获取一个特定国家的所有城市,我是如何做到这一点的,就是使用一个json文件填充数据,并用python对其进行过滤。但是,我在访问对象的字符串索引时遇到了问题,并且在回溯中遇到了类型错误

我试过把它转换成一个字符串,除此之外,我真的不知道该怎么办

test = "http://battuta.medunes.net/api/city/fr/search/?region=pa&key=efb0d6bd19fb2f25dc28dccbd7805d59"
resp = requests.get(url="https://pkgstore.datahub.io/core/world-cities/world-cities_json/data/5b3dd46ad10990bca47b04b4739a02ba/world-cities_json.json").json()
data = json.dumps(resp, sort_keys=True, ensure_ascii=False, indent=4)
print(data["country"])

JSON示例:

    {
        "country": "Zimbabwe",
        "geonameid": 1085510,
        "name": "Epworth",
        "subcountry": "Harare"
    },
    {
        "country": "Zimbabwe",
        "geonameid": 1106542,
        "name": "Chitungwiza",
        "subcountry": "Harare"
    }

我希望能得到这个国家的名字。不过,我只想能够访问我的数据值


Tags: 数据字符串name程序jsonworlddata国家
3条回答

resp是对象列表,因此应首先调用索引,然后调用键: resp[索引][键]

另外,不需要第3行。您已经将resp转换为JSON

由于您已经通过调用.json()来转换JSON中的响应,因此无需调用json.dumps()。 这应该起作用:

test = "http://battuta.medunes.net/api/city/fr/search/?region=pa&key=efb0d6bd19fb2f25dc28dccbd7805d59"
resp = requests.get(url="https://pkgstore.datahub.io/core/world-cities/world-cities_json/data/5b3dd46ad10990bca47b04b4739a02ba/world-cities_json.json").json()
print(resp[0]["country"])  # Since resp is a list, so resp[0]["country"] to access first object's country property

json.dumps()resp对象转换为str,这就是您获得TypeError: string indices must be integers的原因

你不需要json.dumps,你可以这样做:

test = "http://battuta.medunes.net/api/city/fr/search/?region=pa&key=efb0d6bd19fb2f25dc28dccbd7805d59"
resp = requests.get(url="https://pkgstore.datahub.io/core/world-cities/world-cities_json/data/5b3dd46ad10990bca47b04b4739a02ba/world-cities_json.json").json()

print(resp[0]["country"])

但是如果您仍然需要使用json.dumps

test = "http://battuta.medunes.net/api/city/fr/search/?region=pa&key=efb0d6bd19fb2f25dc28dccbd7805d59"
resp = requests.get(url="https://pkgstore.datahub.io/core/world-cities/world-cities_json/data/5b3dd46ad10990bca47b04b4739a02ba/world-cities_json.json").json()
data = json.dumps(resp[0]["country"], sort_keys=True, ensure_ascii=False, indent=4)

print(data)

相关问题 更多 >