Python解析嵌套JSON:提取Item与URL字段遇KeyError问题
解决JSON解析:提取URL与修复KeyError:0问题
嘿,我来帮你搞定这个JSON解析的麻烦事儿!先理清楚你遇到的两个问题:提取URL失败,还有取subscriptions时的KeyError:0,咱们一步步来解决。
先搞懂KeyError:0的原因
你遇到的KeyError: 0,大概率是因为subscriptions是字典类型,而不是你以为的列表。当你用subscriptions[0]去访问时,Python会把0当作字典的键去查找,但你的字典里根本没有这个键,所以就报错啦。
先确认JSON结构(关键!)
首先建议你先把整个payload的结构打印出来,这样能清晰看到每个字段的层级:
import json # 假设你已经把JSON字符串加载成了字典 payload_data = json.loads(your_json_content) # 格式化打印结构,方便查看层级 print(json.dumps(payload_data, indent=2))
比如打印后可能看到类似这样的结构(我根据你的问题推测的常见情况):
{ "payload": { "Item1": "xxx", "Item2": "yyy", "subscriptions": { "url": "https://your-target-url.com", "other_info": "zzz" } } }
提取URL的正确方式
根据上面的结构,URL在payload -> subscriptions -> url层级下,所以提取代码应该是:
# 提取目标URL target_url = payload_data['payload']['subscriptions']['url']
如果你的subscriptions其实是列表(比如包含多个订阅项),那结构可能是这样:
{ "payload": { "Item1": "xxx", "Item2": "yyy", "subscriptions": [ { "url": "https://first-url.com", "name": "sub1" }, { "url": "https://second-url.com", "name": "sub2" } ] } }
这种情况下,要提取第一个订阅的URL,得先判断列表不为空,再用索引访问:
subscriptions_list = payload_data['payload']['subscriptions'] if subscriptions_list: first_url = subscriptions_list[0]['url'] else: print("没有找到订阅项哦")
额外小技巧:更安全的提取方式
如果怕字段不存在导致报错,可以用字典的get方法,给个默认值兜底:
# 即使subscriptions或url不存在,也不会报错,会返回默认值 safe_url = payload_data['payload'].get('subscriptions', {}).get('url', '未找到URL')
内容的提问来源于stack exchange,提问作者tweeks200
相关产品推荐
相关产品推荐

