如何用Python 3从接口JSON的JsonData数组提取LTP实时行情值?
问题修复与代码优化
嘿,我来帮你搞定这段代码的问题~
你当前代码的核心错误是:data是接口返回的字符串,不能直接用data['JsonData']去索引字段。必须先把整个字符串解析成Python字典对象,才能访问里面的键值对。
下面是修正并优化后的代码,还加了异常处理来应对常见的网络和解析问题:
from urllib.request import urlopen, HTTPError import json url = "https://ewmw.edelweiss.in/api/Market/Process/GetFutureValue/BANKNIFTY/05%20Apr%202018" try: # 发起网络请求并获取响应 response = urlopen(url) # 读取响应内容并解码为UTF-8字符串 data_str = response.read().decode("utf-8") # 将JSON字符串解析为Python字典 data_dict = json.loads(data_str) # 提取JsonData数组(用get避免字段不存在时抛错) json_data = data_dict.get("JsonData", []) # 遍历数组,提取每个元素的LTP实时行情值 if json_data: print("提取到的LTP实时行情值:") for item in json_data: ltp_value = item.get("LTP") if ltp_value is not None: print(ltp_value) else: print("未找到JsonData数组,或数组为空") except HTTPError as e: print(f"网络请求失败,状态码:{e.code}") except json.JSONDecodeError: print("解析失败:返回的内容不是有效的JSON格式") except Exception as e: print(f"发生未知错误:{str(e)}")
关键修正点说明:
- 先通过
json.loads()把字符串转成字典,再访问JsonData字段,这是你原来代码最核心的问题; - 使用
get()方法替代直接索引(比如data_dict.get("JsonData")而不是data_dict["JsonData"]),这样如果接口返回的JSON里没有这个字段,代码不会直接崩溃,而是返回默认值; - 增加了异常捕获,覆盖了网络请求失败、JSON解析错误等场景,让代码更健壮;
- 遍历
JsonData数组,逐个提取LTP值,确保你能拿到所有实时行情数据。
内容的提问来源于stack exchange,提问作者Rushikesh Joshi
相关产品推荐
相关产品推荐

