淘宝 API 详情类 JSON 结构化解析实战(核心章节)

一、前言:为什么结构化解析是核心?

淘宝商品详情 API 返回的是多层嵌套 JSON,包含商品基础信息、SKU、图片、价格、营销、物流、服务等数十个字段。 直接使用原始数据会出现:

  • 字段缺失导致程序崩溃
  • SKU 解析混乱
  • 价格类型不统一
  • 图片防盗链无法展示
  • HTML 详情无法直接复用

结构化解析 = 把杂乱嵌套 JSON → 干净、统一、可直接入库 / 前端使用的标准数据模型


二、解析目标

把淘宝 API 原始返回,解析成统一结构:

  1. 商品基础信息(ID、标题、类目、状态)
  2. 价格体系(原价、促销价、券后价)
  3. SKU 规格(规格名、规格值、价格、库存)
  4. 图片资源(主图、详情图、去防盗链处理)
  5. 商品详情(HTML 清洗、文本提取)
  6. 销售信息(销量、发货地、服务)

三、原始 JSON 结构回顾(简化版)

json

复制代码
{
    "item_get_response": {
        "item": {
            "num_iid": "680123456789",
            "title": "夏季纯棉短袖T恤",
            "price": "89.00",
            "promotion_price": "59.00",
            "pic_url": "https://img.taobao.com/xxx.jpg",
            "item_imgs": [ {"url":"https://img.taobao.com/xxx1.jpg"}, ... ],
            "skus": {
                "sku": [
                    {
                        "sku_id": "123456",
                        "price": "59.00",
                        "quantity": 100,
                        "properties_name": "颜色:白色;尺码:M"
                    }
                ]
            },
            "desc": "<p>商品详情HTML</p>",
            "sales": 12345,
            "free_ship": true
        }
    }
}

四、结构化解析实战(分步 + 代码 + 说明)

1. 根节点解析:提取 item 主体

技术点 :淘宝 API 固定包裹在 item_get_response → item

python

运行

复制代码
# 解析入口
def parse_item(json_data):
    # 1. 提取根节点
    response = json_data.get("item_get_response", {})
    item = response.get("item", {})
    if not item:
        raise Exception("商品数据为空")
    return item

2. 基础字段解析(最稳定、必用)

python

运行

复制代码
num_iid = item.get("num_iid", "")         # 商品唯一ID
title = item.get("title", "")             # 标题
cid = item.get("cid", "")                  # 类目ID
category_name = item.get("category_name", "")  # 类目名称
location = item.get("location", "")        # 发货地
seller_nick = item.get("nick", "")         # 卖家昵称
shop_name = item.get("shop_name", "")      # 店铺名
detail_url = item.get("detail_url", "")    # 商品链接

踩坑点

  • num_iid 必须字符串类型,不能转数字(避免超长精度丢失)

3. 价格体系解析(重点)

淘宝价格字段多,必须统一结构化:

python

运行

复制代码
# 价格统一格式化
price_data = {
    "origin_price": float(item.get("price", 0)),        # 原价
    "sale_price": float(item.get("promotion_price", 0)),# 促销价
    "final_price": 0.0
}

# 最终价 = 促销价优先,无促销则用原价
price_data["final_price"] = price_data["sale_price"] or price_data["origin_price"]

业务价值:价格监控、比价系统核心字段


4. 图片资源解析(去防盗链)

技术点:淘宝图片有防盗链,需标准化处理

python

运行

复制代码
# 主图
main_pic = item.get("pic_url", "")

# 详情图列表
item_imgs = item.get("item_imgs", [])
img_list = [img.get("url", "") for img in item_imgs if img.get("url")]

# 清洗:去掉协议头,兼容HTTPS/HTTP
img_list = [
    url.replace("http:", "https:") for url in img_list
]

实战用途:自有商城、小程序、APP 商品展示


5. SKU 规格结构化解析(最复杂、最核心)

目标:

颜色:白色;尺码:M 解析为:

plaintext

复制代码
{
    "specs": {"颜色":"白色","尺码":"M"},
    "price":59,
    "stock":100
}

解析代码

python

运行

复制代码
sku_list = []
sku_array = item.get("skus", {}).get("sku", [])

for sku in sku_array:
    sku_id = sku.get("sku_id", "")
    price = float(sku.get("price", 0))
    stock = sku.get("quantity", 0)
    props_name = sku.get("properties_name", "")
    
    # 拆分规格:颜色:白色;尺码:M
    specs = {}
    if props_name:
        prop_arr = props_name.split(";")
        for p in prop_arr:
            if ":" in p:
                k, v = p.split(":", 1)
                specs[k] = v
    
    sku_info = {
        "sku_id": sku_id,
        "price": price,
        "stock": stock,
        "specs": specs
    }
    sku_list.append(sku_info)

这是电商系统必备结构:下单、库存、规格选择全靠它


6. 商品详情 HTML 解析与清洗

python

运行

复制代码
desc_html = item.get("desc", "")

# 清洗:去掉淘宝无用标签、懒加载、内链
def clean_html(html):
    html = html.replace("data-src", "src")   # 懒加载替换
    html = html.replace("taobao.com", "")    # 可按需过滤
    return html

用途:同步到自有商城、小程序详情页


7. 销售与服务结构化

python

运行

复制代码
sales_info = {
    "sales": item.get("sales", 0),               # 销量
    "free_shipping": item.get("free_ship", False), # 是否包邮
    "service": item.get("service", ""),           # 服务:七天无理由
    "is_on_sale": True  # 可根据字段判断上下架
}

五、最终输出:标准结构化商品模型

json

复制代码
{
    "num_iid": "680123456789",
    "title": "夏季纯棉短袖T恤",
    "price": {
        "origin": 89.00,
        "sale": 59.00,
        "final": 59.00
    },
    "images": {
        "main": "https://img.taobao.com/xxx.jpg",
        "list": [ "https://img.taobao.com/xxx1.jpg", ... ]
    },
    "skus": [
        {
            "sku_id": "123456",
            "price": 59.00,
            "stock": 100,
            "specs": { "颜色": "白色", "尺码": "M" }
        }
    ],
    "sales": 12345,
    "free_shipping": true,
    "desc": "<p>清洗后的HTML</p>"
}

这就是企业级标准结构:可直接入库、给前端、给 ERP、给小程序


六、本章技术总结(可直接放文章结尾)

淘宝商品详情 API 的 JSON 结构化解析,是电商数据开发中最关键、最实用、最容易踩坑的环节。 核心价值:

  1. 统一字段,消除 API 嵌套混乱
  2. SKU 规格化,支撑下单、库存、规格选择
  3. 价格标准化,支撑比价、监控、营销
  4. 图片 / 详情清洗,支持多端展示
  5. 输出标准模型,可直接用于业务系统
相关推荐
赵庆明老师2 天前
Vben精讲:21-详解web-antd:tsconfig.json
前端·json·vim
红叶舞3 天前
成数据绑定对象,在应用程序中处理完数据后,将更新的数据序列化为JSON传回远端服务器,很多移动应用使用了这种模式处理服务器端的数据。 ...
运维·服务器·json
name好难取诶4 天前
解析请求体内容(如 JSON、表单数据、XML 等) 将原始数据转换为 Python 数据结构 使转换后的数据可在 request. ...
xml·python·json
gcw10244 天前
JSONMe 简觅JSON 工具
json·json格式化·json可视化·json美化·json校验·好用的json工具·json编辑
北北牌屈四巴格!4 天前
whistle自定义修改接口返回值内容
前端·json
SQDN5 天前
Chatbox 1.22.1 获取不到模型?先验 /models,再对齐精确 model ID
人工智能·测试工具·机器学习·chatgpt·json
SunnyDays10115 天前
Python 将 Excel(XLS/XLSX)转换为 JSON:导出工作簿、工作表、单元格区域与自定义 JSON 结构
python·json·excel·excel 转 json·导出 excel 到 json·xlsx 转 json·xls 转 json
刘小八5 天前
Spring AI 结构化输出:稳定生成可校验的业务 JSON
人工智能·spring·json
CodexDave6 天前
Python 自动化接单实战(一):把 CSV 需求做成配置驱动解析器
java·python·自动化·json·数据清洗·python自动化·csv处理
今夜有雨.7 天前
C++JSON 解析器
c++·笔记·后端·学习·json