Go填充含匿名子结构体数组的struct生成JSON出现语法错误如何解决
错误原因及修正方案
核心错误点
CustomFields字段是匿名结构体切片类型,你初始化时直接写[]{}缺少必要的类型声明,不符合Go语法规则- 嵌套结构体没有逐层完成初始化,编译器无法识别键值对对应的结构体层级
方案1:调整结构体定义(推荐,可读性和可维护性更高)
先把JSON-to-Go生成的匿名结构体抽为具名类型,后续初始化更简单:
// 定义内层嵌套结构体 type CustomFieldValue struct { Name string `json:"name"` } type CustomField struct { Value CustomFieldValue `json:"value"` Name string `json:"name"` Type string `json:"$type"` } // 外层结构体调整为使用具名类型 type IssueSetState struct { ID string `json:"id"` CustomFields []CustomField `json:"customFields"` }
对应的初始化代码:
jsonValues := &IssueSetState{ ID: resultEntityId.ID, CustomFields: []CustomField{ { Value: CustomFieldValue{ Name: "Fixed", }, Name: "State", Type: "StateIssueCustomField", }, }, } jsonEncoded := new(bytes.Buffer) json.NewEncoder(jsonEncoded).Encode(jsonValues)
方案2:不修改原始结构体定义,按匿名结构体规则初始化
如果你不想改动自动生成的结构体,可以补全匿名结构体的类型声明完成初始化:
jsonValues := &IssueSetState{ ID: resultEntityId.ID, CustomFields: []struct { Value struct { Name string `json:"name"` } `json:"value"` Name string `json:"name"` Type string `json:"$type"` }{ { Value: struct { Name string `json:"name"` }{ Name: "Fixed", }, Name: "State", Type: "StateIssueCustomField", }, }, } jsonEncoded := new(bytes.Buffer) json.NewEncoder(jsonEncoded).Encode(jsonValues)
内容的提问来源于stack exchange,提问作者Jonny Barnes
相关产品推荐
相关产品推荐

