You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python获取并排序JSON数据?遍历仅输出单条数据求助

解决Python获取JSON数据、遍历显示及排序的问题

嘿,我来帮你理清这几个问题:

首先,你觉得遍历的时候“仅能输出单条数据”,其实是个视觉错觉——你的print语句把所有字段直接拼接在一起,没有换行或者空格分隔,导致所有站点的内容都挤成了一大串,看起来像是只有一条结果。咱们先把这个问题解决掉,再来说排序的事儿。

第一步:修正JSON解析与遍历输出

首先,绝对不要用eval()来解析JSON——这玩意儿会执行字符串里的任意代码,有安全风险,而且遇到复杂JSON格式很容易翻车。Python自带的json.loads()才是处理JSON的标准姿势,安全又可靠。

然后,修改你的print语句,给每条数据加上换行和字段分隔,让输出清晰可读:

import json
import requests

url1 = 'https://opendata.epa.gov.tw/ws/Data/ATM00625/?$format=json'
html = requests.get(url1)
html.encoding = html.apparent_encoding

# 用安全的json.loads解析JSON,替代eval
jsondata = json.loads(html.text)

# 遍历每条数据,让每条结果单独一行,字段间用空格分隔
for site in jsondata:
    sitename = site["Site"]
    countyname = site["county"]
    pm25 = site["PM25"]
    date = site["DataCreationDate"]
    unit = site["ItemUnit"]
    # 使用f-string让代码更简洁,同时添加分隔符和换行
    print(f"SITE:{sitename}  CITY:{countyname}  PM25:{pm25}  DATE:{date}  UNIT:{unit}")

运行这段代码,你就能看到每条站点数据单独一行显示了,不会再混在一起。

第二步:对JSON数据进行排序

接下来是排序需求,根据不同的排序维度,我们可以用Python的sorted()函数来实现,它支持通过key参数指定排序依据。

按站点名称(Site)排序

如果想按站点名称的拼音/字母顺序升序排序,代码如下:

# 按Site字段升序排序
sorted_by_site = sorted(jsondata, key=lambda x: x["Site"])

# 遍历排序后的结果
for site in sorted_by_site:
    print(f"SITE:{site['Site']}  CITY:{site['county']}  PM25:{site['PM25']}  DATE:{site['DataCreationDate']}  UNIT:{site['ItemUnit']}")

按PM25数值排序

注意PM25字段可能存在空字符串或者非数字的情况,所以我们需要先处理这些异常值,避免转换时出错:

# 定义一个函数,用来获取PM25的数值(空值或非数字返回-1,放到排序最后)
def get_pm25_value(item):
    try:
        # 尝试转换为浮点数,空字符串则返回-1
        return float(item["PM25"]) if item["PM25"].strip() else -1
    except ValueError:
        # 遇到非数字内容也返回-1
        return -1

# 按PM25数值降序排序(数值大的在前)
sorted_by_pm25 = sorted(jsondata, key=get_pm25_value, reverse=True)

# 遍历排序后的结果
for site in sorted_by_pm25:
    print(f"SITE:{site['Site']}  CITY:{site['county']}  PM25:{site['PM25']}  DATE:{site['DataCreationDate']}  UNIT:{site['ItemUnit']}")

总结一下

  • 解析JSON用json.loads(),别用eval(),安全第一
  • 打印结果时添加换行和分隔符,避免视觉混淆
  • 排序用sorted()函数,通过key指定排序字段,记得处理可能的异常值(比如空的PM25)

内容的提问来源于stack exchange,提问作者George Mesis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 11:18:11