如何在Python中实现类似PowerShell的JSON顶层属性表格化输出?
在Python中模拟PowerShell式的JSON顶层属性表格输出
要实现PowerShell调用sec.gov API后那种只展示顶层属性+值的简要表格效果,核心就是两步:提取JSON的顶层键值对,把数组、嵌套对象这类复杂值转换成简短的摘要,再整理成规整的表格。下面给两种实用的实现方式:
方法1:手动生成表格(无需额外依赖)
不需要装任何第三方库,自己处理值的摘要和表格格式,灵活性更高:
import requests # 调用sec.gov的API示例(以苹果公司的公司事实数据为例) api_url = "https://data.sec.gov/api/xbrl/companyfacts/CIK0000320193.json" # sec.gov要求必须设置User-Agent,替换成你的姓名和邮箱 headers = {"User-Agent": "Your Full Name your.email@example.com"} response = requests.get(api_url, headers=headers) json_data = response.json() # 整理顶层属性的摘要信息 top_level_info = [] for key, value in json_data.items(): # 根据值的类型生成简要显示内容 if isinstance(value, list): display_value = f"[{len(value)} 条数据]" elif isinstance(value, dict): display_value = f"{{{len(value)} 个键}}" else: display_value = str(value) top_level_info.append( (key, display_value) ) # 计算列宽,让表格对齐 max_key_len = max(len(item[0]) for item in top_level_info) + 2 max_val_len = max(len(item[1]) for item in top_level_info) + 2 # 打印表格 print(f"{'属性名'.ljust(max_key_len)} | {'值摘要'.ljust(max_val_len)}") print('-' * (max_key_len + max_val_len + 3)) for key, val in top_level_info: print(f"{key.ljust(max_key_len)} | {val.ljust(max_val_len)}")
方法2:用tabulate库快速生成表格
如果嫌手动调格式麻烦,可以用tabulate库一键生成各种样式的表格,先通过pip安装:
pip install tabulate
然后代码实现:
import requests from tabulate import tabulate api_url = "https://data.sec.gov/api/xbrl/companyfacts/CIK0000320193.json" headers = {"User-Agent": "Your Full Name your.email@example.com"} response = requests.get(api_url, headers=headers) json_data = response.json() # 准备表格行数据 table_rows = [] for key, value in json_data.items(): if isinstance(value, list): val_summary = f"[{len(value)} 条数据]" elif isinstance(value, dict): val_summary = f"{{{len(value)} 个键}}" else: val_summary = str(value) table_rows.append( [key, val_summary] ) # 生成表格,tablefmt可选grid、plain、pretty等样式 print(tabulate(table_rows, headers=["属性名", "值摘要"], tablefmt="grid"))
注意事项
- sec.gov的API强制要求设置
User-Agent,必须包含你的真实姓名和邮箱,否则会返回403错误 - 你可以根据需求调整值的摘要逻辑,比如嵌套字典可以显示几个关键键名,而不是只显示键的数量
内容的提问来源于stack exchange,提问作者dharmatech
相关产品推荐
相关产品推荐

