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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:36:03