You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:24:19