在 Python 中读取 JSON 字符串:接收错误“TypeError:字符串索引必须是整数”
Posted
技术标签:
【中文标题】在 Python 中读取 JSON 字符串:接收错误“TypeError:字符串索引必须是整数”【英文标题】:Reading a JSON string in Python: Receiving error " TypeError: string indices must be integers" 【发布时间】:2017-06-04 18:18:52 【问题描述】:我正在尝试创建一个使用 OpenWeatherMap API 获取当前天气的程序。在从互联网接收数据时,我是编码意义上的编码新手。
我收到的错误是:
"Traceback(最近一次调用最后一次): 文件“/home/pi/Python Codes/Weather/CurrentTest3.py”,第 7 行,在 temp_k = [record['temp'] for record in url2 ['main']] #这行应该从.Json文件中记下温度信息 文件“/home/pi/Python Codes/Weather/CurrentTest3.py”,第 7 行,在 temp_k = [record['temp'] for record in url2 ['main']] #这行应该从.Json文件中记下温度信息 TypeError: 字符串索引必须是整数
我不明白为什么会这样,我的代码如下。
from dateutil import parser #imports parser
from pprint import pprint #imports pprint
import requests #imports request
url = requests.get('http://api.openweathermap.org/data/2.5/weather? q=london&APPID=APIKEY') #identifies the url address
pprint(url.json()) #prints .JSON information from address
url2 = url.json() #establishes .Json file as variable
temp_k = [record['temp'] for record in url2 ['main']] #this line should take down the temperature information from the .Json file
print(temp_k) #prints the value for temperature
【问题讨论】:
那是因为url2
是字典列表,而不是字典。
【参考方案1】:
问题在于temp_k
、record['temp']
的这一部分。
这是每个变量record
的格式:
for record in url2 ['main']:
print record
>> pressure
temp_min
temp_max
temp
humidity
您尝试将一堆字符串作为字典进行索引,因此出现字符串索引错误。只需将temp_k
行更改为:
temp_k = [url2['main'].get('temp')]
>> [272.9]
【讨论】:
【参考方案2】:您数据中main
的值是一个字典,而不是字典列表。所以不需要遍历它;只需直接访问 temp 值。
temp_k = url2['main']['temp']
【讨论】:
以上是关于在 Python 中读取 JSON 字符串:接收错误“TypeError:字符串索引必须是整数”的主要内容,如果未能解决你的问题,请参考以下文章
json数据处理:读取文件中的json字符串,转为python字典
c# 读取json的问题,JObject不能强转成JArray
如何通过 Python pandas 读取 json 数组数据