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

如何将Python库存查询接口返回的JSON数据转换为美观ASCII表格

Python API返回JSON转ASCII格式化表格实现方案

现有基础代码

import requests 
import xml.etree.ElementTree as ET
import json

def get_stock(sku):
    params = {'ItemId': sku}
    base_url = 'http://10.0.0.25/api/GetSku'
    response = requests.get(base_url, params=params)
    json_parsed = json.loads(response.content)
     
    if response.status_code == 200:
      return [item for item in response.json() if item['Site'] == "12"]
    else:
      return None

def jprint(obj):
    text = json.dumps(obj, sort_keys=True, indent=4)
    print(text)
# 注意:原调用参数为字符串,需加引号否则会触发语法错误
jprint(get_stock("101025HRLONDON"))

当前JSON输出格式

[
    {
        "ItemId": "101025HRLONDON",
        "Site": "12",
        "Warehouse": "17",
        "availablePhysical": 1.0
    },
    {
        "ItemId": "101025HRLONDON",
        "Site": "12",
        "Warehouse": "33",
        "availablePhysical": 1.0
    },
    {
        "ItemId": "101025HRLONDON",
        "Site": "12",
        "Warehouse": "34",
        "availablePhysical": 1.0
    }
]

期望输出效果

+----+------+----------------------+
| WH |aval. | ItemID               |
+----+------+----------------------+
| 17 |    1 | 101025HRLONDON       |
| 33 |    1 | 101025HRLONDON       |
| 34 |    1 | 101025HRLONDON       |
+----+------+----------------------+

具体实现方案

方案1:使用tabulate第三方库(推荐)

tabulate是专门用于生成格式化ASCII表格的Python库,支持多种表格样式,代码量极少,适配性高。

  • 第一步:安装依赖
    pip install tabulate
  • 第二步:替换原有打印逻辑即可
    修改后完整代码如下:
import requests 
import json
from tabulate import tabulate

def get_stock(sku):
    params = {'ItemId': sku}
    base_url = 'http://10.0.0.25/api/GetSku'
    response = requests.get(base_url, params=params)
     
    if response.status_code == 200:
      return [item for item in response.json() if item['Site'] == "12"]
    else:
      return None

def print_stock_table(stock_list):
    if not stock_list:
        print("无库存数据")
        return
    # 组装表格数据,做字段映射和类型转换
    table_data = [
        [item["Warehouse"], int(item["availablePhysical"]), item["ItemId"]]
        for item in stock_list
    ]
    # 定义表头
    headers = ["WH", "aval.", "ItemID"]
    # 生成grid格式的表格,和要求的样式完全一致
    print(tabulate(table_data, headers=headers, tablefmt="grid"))

# 调用打印
stock_data = get_stock("101025HRLONDON")
print_stock_table(stock_data)

方案2:纯原生实现(无第三方依赖)

如果环境不允许安装额外Python包,可以自己实现表格拼接逻辑,代码如下:

import requests 
import json

def get_stock(sku):
    params = {'ItemId': sku}
    base_url = 'http://10.0.0.25/api/GetSku'
    response = requests.get(base_url, params=params)
     
    if response.status_code == 200:
      return [item for item in response.json() if item['Site'] == "12"]
    else:
      return None

def print_stock_table(stock_list):
    if not stock_list:
        print("无库存数据")
        return
    # 配置列信息:表头、对应取值逻辑、列宽
    columns = [
        ("WH", lambda x: x["Warehouse"], 4),
        ("aval.", lambda x: str(int(x["availablePhysical"])), 6),
        ("ItemID", lambda x: x["ItemId"], 22)
    ]
    # 生成分隔线
    separator = "+" + "+".join(["-" * col[2] for col in columns]) + "+"
    # 打印表头
    print(separator)
    header_line = "|" + "|".join([col[0].ljust(col[2]) for col in columns]) + "|"
    print(header_line)
    print(separator)
    # 打印每行数据
    for item in stock_list:
        line = "|" + "|".join([col[1](item).ljust(col[2]) for col in columns]) + "|"
        print(line)
    # 打印底部分隔线
    print(separator)

# 调用打印
stock_data = get_stock("101025HRLONDON")
print_stock_table(stock_data)

该方案可以根据实际数据长度灵活调整列宽,只要修改columns配置里的列宽参数即可适配不同长度的内容。


内容的提问来源于stack exchange,提问作者Ghazi Mohammed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:15:08