如何将OCI SDK返回的响应正确转换为Python字典对象
问题根因
你的代码存在两个核心问题,导致无法得到预期字典:
- 序列化逻辑完全错误:
json.dumps(str(myresp))这一步中,str(myresp)仅会把SDK返回的模型对象列表转成供人阅读的字符串表示,既不是合法JSON结构,也丢失了原有对象的结构化属性;对这个普通字符串再执行json.dumps,得到的是被额外包裹一层引号的字符串,后续json.loads解析后自然还是字符串类型,不可能生成字典。 - 变量名拼写不一致:定义的字典变量名为
mypyth,打印时写的是my_pyth,运行时还会触发NameError。
正确实现方案
OCI Python SDK 为所有响应模型内置了to_dict()方法,不需要手动做JSON字符串的来回转换,直接调用即可得到标准Python字典:
import oci # 原有core_client初始化逻辑保持不变 instance_list = core_client.list_instances(compartment, display_name="myinstance").data # instance_list 类型为 List[oci.core.models.Instance],是SDK定义的模型对象列表 for instance in instance_list: # 直接调用内置方法转字典 instance_info = instance.to_dict() # 直接读取字段即可 print("实例ID:", instance_info['id'])
如果一定要走JSON序列化/反序列化的链路(无特殊需求不推荐,属于冗余操作),也需要先把模型对象转为结构化字典再做序列化,不能直接转字符串:
import oci import json instance_list = core_client.list_instances(compartment, display_name="myinstance").data # 先把所有模型对象转成可序列化的字典结构,再生成JSON字符串 json_str = json.dumps([ins.to_dict() for ins in instance_list]) # 解析后得到字典列表 result = json.loads(json_str) for item in result: print(item['id'])
注意事项
- 所有OCI SDK返回的响应模型,不管是单个对象还是列表内的元素,都自带
to_dict()方法,转换后会完整保留所有返回字段,直接按需读取即可。 - 编写代码时保持变量名前后一致,避免因拼写错误触发不必要的运行时报错。
内容的提问来源于stack exchange,提问作者mikey
相关产品推荐
相关产品推荐

