python - 如何从复杂的 JSON API 返回嵌套值

标签 python json api-design

我正在设置一个天气摄像头,它将提供室外当前状况的实时流,但我也想覆盖来自本地国家气象局的不断更新的天气状况(温度、风速/方向、当前天气)气象站,来自以 JSON 格式提供的浏览器 API 源。

我已经使用我编写的 Python 脚本成功从不同的 API 源中提取了所需的值;然而长话短说,API 来源并不可靠。因此,我使用附近机场国家气象局 ASOS 官方站的 API。然而,我正在轮询的新 API 源的输出相当复杂,具有各种缩进层。我使用 Python 的时间不长,在线教程和指南要么适用于其他语言(主要是 Java 或 C++),要么不适用于我的具体情况。

首先,这是我收到的 JSON 的结构:

screenshot of JSON structure

我强调了我试图提取的值。它们列在 OBSERVATIONS 部分下,与 precip_accum_24_hour_value_1wind_gust_value_1wind_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/

相关文章:

python - 如何通过每次都可以更改的索引删除列表中的多个元素?

python - Python中Redis连接池的正确使用方式

php - 如何使用 HttpURLConnection 在 php 中发送 json 以读取 'php://input'?

security - 保护/隐藏 Swagger/OpenAPI 规范文档是否合适?

JavaScript 期间功能 : How do I setup a library like jQuery did

python - 在不重置权重的情况下将正则化器添加到已训练模型的现有层中?

python - Null 处理程序在 python 日志记录中的用途是什么?

json - Node JS : Validating request type (checking for JSON or HTML)

json - 如何发布嵌套数据和图像列表

soap - 如何创建向后兼容的 JAX-RS 和 JAX-WS API?