在 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_krecord['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字典

pythhon_如何读取json数据

c# 读取json的问题,JObject不能强转成JArray

如何通过 Python pandas 读取 json 数组数据

如何在 Bigquery 中插入一个接收 json 字符串值的字段?

Python 文件IO:JSON 文件的读取与写入