如何通过servicenow-sdk-go访问TableEntry的display_value?
解决ServiceNow Go SDK获取display_value的问题
不用放弃这个库,试试下面两种方法来获取你需要的display_value:
方法1:类型断言直接解析嵌套Map
因为records.Result里的TableEntry本质是封装的map结构,你可以通过多层类型断言来提取目标值:
for _, entry := range records.Result { // 将TableEntry断言为map[string]interface{} entryMap, ok := entry.(map[string]interface{}) if !ok { continue } // 取出cmdb_ci_service字段并断言为子map ciService, ok := entryMap["cmdb_ci_service"].(map[string]interface{}) if !ok { continue } // 提取display_value displayVal, ok := ciService["display_value"].(string) if ok { // 此处即为需要的内容 fmt.Println(displayVal) } }
如果之前类型断言失败,可先通过reflect.TypeOf(entry)打印实际类型,再调整断言逻辑。
方法2:结构体映射解析
如果需要更优雅的代码结构,可以定义匹配返回字段的结构体,通过JSON序列化/反序列化转换数据:
import "encoding/json" // 定义匹配返回结构的结构体 type CmdbCiService struct { DisplayValue string `json:"display_value"` // 可按需添加其他字段,如Value string `json:"value"` } type TaskCiEntry struct { CmdbCiService CmdbCiService `json:"cmdb_ci_service"` // 其他返回字段按需补充 } // 转换records.Result到结构体切片 entries := make([]TaskCiEntry, 0, len(records.Result)) data, err := json.Marshal(records.Result) if err != nil { // 处理序列化错误 panic(err) } if err := json.Unmarshal(data, &entries); err != nil { // 处理反序列化错误 panic(err) } // 直接访问display_value for _, item := range entries { fmt.Println(item.CmdbCiService.DisplayValue) }
这两种方法都能帮你拿到目标值,无需手动调用ServiceNow API。
内容的提问来源于stack exchange,提问作者Ulrar
相关产品推荐
相关产品推荐

