我正在设置一个天气摄像头,它将提供室外当前状况的实时流,但我也想覆盖来自本地国家气象局的不断更新的天气状况(温度、风速/方向、当前天气)气象站,来自以 JSON 格式提供的浏览器 API 源。
我已经使用我编写的 Python 脚本成功从不同的 API 源中提取了所需的值;然而长话短说,API 来源并不可靠。因此,我使用附近机场国家气象局 ASOS 官方站的 API。然而,我正在轮询的新 API 源的输出相当复杂,具有各种缩进层。我使用 Python 的时间不长,在线教程和指南要么适用于其他语言(主要是 Java 或 C++),要么不适用于我的具体情况。
首先,这是我收到的 JSON 的结构:
我强调了我试图提取的值。它们列在 OBSERVATIONS
部分下,与 precip_accum_24_hour_value_1
、wind_gust_value_1
、wind_cardinal_direction_value_1d
等关联。问题是每个观察结果下面都有两个值,因此我尝试过的脚本没有返回我想要的值。这是我尝试过的代码:
import urllib.request
import json
f = urllib.request.urlopen('https://api.synopticdata.com/v2/stations/latest?token=8c96805fbf854373bc4b492bb3439a67&stid=KSTC&complete=1&units=english&output=json')
json_string = f.read()
parsed_json = json.loads(json_string)
for each in parsed_json['STATION']:
observations = each['OBSERVATIONS']
print(observations)
这将按照预期将 JSON 中 OBSERVATIONS
下的所有内容打印为一个长字符串。
{'precip_accum_24_hour_value_1': {'date_time': '2018-12-06T11:53:00Z', 'value': 0.01}, 'wind_gust_value_1': {'date_time': '2018-12-12T01:35:00Z', 'value': 14.0},
显示我收到的输出的一小段。我希望我可以从这个字符串中单独提取我想要的值,但我尝试的一切都不起作用。我真的很感谢一些指导来完成这段代码,以便我可以返回我正在寻找的值。我意识到这可能是某种循环或特殊语法。
最佳答案
尝试这样的事情:
for each in parsed_json['STATION']:
observations = each['OBSERVATIONS']
for k, v in observations.items():
print(k, v["value"])
JSON 可以很好地映射到 python 的字典和列表类型,因此可以使用 a[<index-or-key>]
来访问子结构。句法。可以如上面所示对字典的键值对进行迭代。如果您还不熟悉 python 中的字典,我建议您阅读它们。网上搜索应该会产生很多好的教程。
这有帮助吗?
关于python - 如何从复杂的 JSON API 返回嵌套值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53857610/