Golang解组JSON响应,然后使用结构字段名封送

Golang解组JSON响应,然后使用结构字段名封送,go,Go,因此,我点击了一个返回JSON响应的API,并将其解组为一个结构,如下所示: package main type ProcessedRecords struct { SLMIndividualID string `json:"individual_id"` HouseholdPosition int `json:"Household Position&qu

因此,我点击了一个返回JSON响应的API,并将其解组为一个结构,如下所示:

package main



type ProcessedRecords struct {
    SLMIndividualID                  string      `json:"individual_id"`
    HouseholdPosition                int         `json:"Household Position"`
    IndividualFirstName              string      `json:"individual_first_name"`
}

func main() {
    req, _ := http.NewRequest(method, url, payload)

    res, err := client.Do(req)
    if err != nil {
        fmt.Println(err)
    }
    defer res.Body.Close()
    body, err := ioutil.ReadAll(res.Body)
    if err != nil {
        fmt.Println(err)
    }
    
    fmt.Println(body)
    
    var responseObject Response
    json.Unmarshal(body, &responseObject)
    fmt.Println(responseObject)
这很有效。但是,我需要再次封送此结构,但我希望将结构字段用作键,而不是
json:…
字段。我正在使用以下代码:

    recordsInput := []*firehose.Record{}
    for i := 0; i < len(records); i++ {
        if len(recordsInput) == 500 {
            * code to submit records, this part works fine *
        }

        b, err := json.Marshal(records[i])

        if err != nil {
            log.Printf("Error: %v", err)
        }

        record := &firehose.Record{Data: b}
        recordsInput = append(recordsInput, record)
    }
我希望它的格式是:

{"individual_id":"33c05b49-149b-480f-b1c2-3a3b30e0cb6f","Household Position":1...}
{"SLMIndividualId":"33c05b49-149b-480f-b1c2-3a3b30e0cb6f","HouseholdPosition":1...}

如何实现这一点?

这些标记说明了应该如何封送结构,因此,如果它们存在,则输出将是这样的。您需要将其转换为不包含
json:
标记的匹配结构:

type ProcessedRecords struct {
    SLMIndividualID     string `json:"individual_id"`
    HouseholdPosition   int    `json:"Household Position"`
    IndividualFirstName string `json:"individual_first_name"`
}

type ProcessedRecordsOut struct {
    SLMIndividualID     string
    HouseholdPosition   int
    IndividualFirstName string
}

func process() {
    var in ProcessedRecords
    json.Unmarshal(data, &in)
    // Convert to same type w/o tags
    out := ProcessedRecordsOut(in)
    payload, _ := json.Marshal(out)
    // ...
}

请参见此处的工作示例:

谢谢,@Adrian。我曾怀疑这是事实,但希望有比复制/粘贴结构更优雅的东西