我正在制作一个程序,它获取特定国家/地区的所有城市,而我的工作方式是使用json文件,该文件中填充了数据并使用python对其进行过滤。但是,我无法访问对象的字符串索引,并且在追溯中遇到了 TypeError 。
我尝试将其转换为字符串,除此之外,我不确定该怎么做。
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"
}
我希望能够获得国家的名字。但是我只想能够访问我的数据值。
答案 0 :(得分:2)
由于您已经通过调用.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
答案 1 :(得分:1)
您的响应是对象列表,因此您应该首先调用索引,然后再调用键: resp [index] [key]
此外,也不是第3行。您已经将您的resp转换为JSON。
答案 2 :(得分:0)
您不需要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)