你想通过 Python 调用京东商品详情 API 接口,并完整获取、解析返回的 JSON 数据,我会提供极简且可直接运行的代码,聚焦「API 请求 → JSON 数据完整获取 → 结构化解析 → 数据保存」全流程,同时说明 JSON 数据的核心结构和解析技巧,确保你能拿到完整的原始 JSON 数据并按需提取字段。
一、核心前提
API 准备:使用聚合数据的京东商品详情 API(新手友好,免费试用),需先在聚合数据官网领取接口,获取
AppKey;依赖安装:仅需
requests库(发送 HTTP 请求):bash运行
二、完整代码(获取完整 JSON 数据)
python
运行
import requestsimport json# ===================== 配置项(替换为你的信息) =====================APP_KEY = "你的聚合数据AppKey" # 替换成自己的AppKeySKU_ID = "100060195820" # 京东商品ID(从商品URL提取)API_URL = "https://v.juhe.cn/jd/item/detail"# ====================================================================def get_jd_item_json():
"""调用京东API,获取完整的JSON返回数据并解析"""
# 1. 构造请求参数(API必填)
params = {
"key": APP_KEY,
"sku_id": SKU_ID }
# 2. 构造请求头(模拟浏览器,避免被拦截)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
try:
# 3. 发送GET请求(设置10秒超时,避免卡死)
response = requests.get(
url=API_URL,
params=params,
headers=headers,
timeout=10
)
# 4. 检查HTTP请求是否成功
if response.status_code != 200:
print(f"❌ HTTP请求失败,状态码:{response.status_code}")
return None
# 5. 获取原始JSON字符串(完整返回数据)
raw_json_str = response.text print("✅ 成功获取API返回的原始JSON数据:")
print("-" * 50)
print(raw_json_str)
print("-" * 50)
# 6. 解析JSON为Python字典(便于提取字段)
json_data = json.loads(raw_json_str)
# 7. 保存完整JSON数据到文件(便于后续分析)
with open("jd_item_full_data.json", "w", encoding="utf-8") as f:
# ensure_ascii=False:保留中文;indent=4:格式化缩进
json.dump(json_data, f, ensure_ascii=False, indent=4)
print("\n📄 完整JSON数据已保存到 jd_item_full_data.json 文件")
# 8. 按需提取核心字段(示例)
if json_data["error_code"] == 0: # API调用成功
item_detail = json_data["result"] # 商品核心数据层
core_fields = {
"商品ID": item_detail.get("sku_id"),
"商品标题": item_detail.get("title"),
"价格": item_detail.get("price"),
"库存状态": item_detail.get("stock_state"),
"店铺名称": item_detail.get("shop_name"),
"销量": item_detail.get("sales"),
"商品主图": item_detail.get("pic_url"),
"发货地": item_detail.get("delivery_place"),
"库存数量": item_detail.get("stock_num"),
"好评率": item_detail.get("good_rate")
}
print("\n🔍 提取的核心字段:")
for key, value in core_fields.items():
print(f"{key}:{value}")
return json_data # 返回解析后的字典
except requests.exceptions.Timeout:
print("❌ 请求超时:API响应过慢,请稍后重试")
except requests.exceptions.ConnectionError:
print("❌ 网络错误:检查网络或API地址")
except json.JSONDecodeError:
print("❌ JSON解析失败:API返回非标准JSON数据")
except KeyError as e:
print(f"❌ 字段缺失:{e}(可能是商品ID无效或API返回格式变更)")
except Exception as e:
print(f"❌ 未知错误:{str(e)}")
return Noneif __name__ == "__main__":
get_jd_item_json()三、JSON 数据核心结构说明
聚合数据京东商品详情 API 返回的 JSON 分为「通用响应层」和「商品数据层」,完整结构如下(示例):
json
{
"error_code": 0, // 通用状态码:0=成功,非0=失败
"reason": "success", // 状态描述(失败时显示原因)
"result": { // 商品核心数据层(重点)
"sku_id": "100060195820", // 商品ID(唯一)
"title": "京东京造 轻量便携保温杯 350ml 白色", // 商品标题
"price": "99.9", // 价格(字符串类型)
"original_price": "129.9", // 原价
"sales": "10万+", // 销量
"stock_state": "有货", // 库存状态
"stock_num": "10000+", // 库存数量
"shop_name": "京东京造官方旗舰店", // 店铺名称
"pic_url": "https://xxx.jpg", // 主图URL
"brand": "京东京造", // 品牌
"delivery_place": "北京", // 发货地
"good_rate": "98%", // 好评率
"spec_info": "颜色:白色|容量:350ml", // 规格
"category": "家居>厨具>水杯>保温杯", // 分类
"create_time": "2024-01-01" // 商品上架时间
// 更多字段可参考聚合数据API文档
}}关键说明:
通用响应层:
error_code是首要判断依据(非 0 时reason会说明失败原因,如「APPKEY 不存在」「商品不存在」);商品数据层:
result包含所有商品详情字段,字段值多为字符串类型(如价格"99.9",需手动转为浮点数);字段兼容性:部分商品可能缺失部分字段(如小众商品无
sales),需用dict.get()提取,避免KeyError。
四、代码核心技巧
获取原始 JSON 字符串:
response.text会返回 API 返回的完整原始 JSON 字符串,适合需要分析完整数据结构的场景;格式化保存 JSON:
json.dump(..., ensure_ascii=False, indent=4)确保中文正常显示,且格式化缩进便于阅读;安全提取字段:用
item_detail.get("字段名")替代直接item_detail["字段名"],字段缺失时返回None,避免程序崩溃;类型转换:价格、库存数量等字段是字符串,如需计算需转为数值类型(如
float(item_detail.get("price", 0.0)))。
五、常见问题及解决
表格
| 问题现象 | 原因 | 解决方法 |
|---|---|---|
返回 JSON 中error_code=10001 | AppKey 错误 / 未激活 | 核对聚合数据的 AppKey,确认接口已领取并完成实名认证 |
返回 JSON 中result为null | 商品 ID 无效 / 商品下架 | 从京东商品 URL 重新提取 SKU_ID(纯数字),确认商品未下架 |
| JSON 保存后中文乱码 | 编码问题 | 保存时指定encoding="utf-8",且json.dump加ensure_ascii=False |
提取字段时提示KeyError | 字段名错误 / 字段缺失 | 查看保存的jd_item_full_data.json,确认字段名;改用get()方法提取 |
总结
核心流程:构造请求参数 → 发送请求 → 获取原始 JSON → 解析为字典 → 提取 / 保存数据;
关键配置:替换
APP_KEY和SKU_ID,确保请求头包含User-Agent;数据处理:优先保存完整 JSON 数据,提取字段时用
get()保证程序稳定性;扩展方向:可循环调用接口批量获取多个商品 JSON,或结合
pandas解析批量数据。
这套代码能帮你快速获取京东商品详情 API 的完整 JSON 返回数据,既适合新手学习 JSON 结构,也能直接用于实际项目中的数据采集。