fatih / structtag

Parse and modify Go struct field tags
Other
633 stars 39 forks source link

Can I modify the tag of the original structure #7

Closed chendongming0625 closed 5 years ago

chendongming0625 commented 5 years ago

hello,Can I modify the tag of the original structure? for example:

func main(){ type Student struct { Name string json:"name,omitempty" }

tag := reflect.TypeOf(Student{}).Field(0).Tag
tags, err := structtag.Parse(string(tag))
jsonTag, err := tags.Get("json")
if err != nil {
    panic(err)
}
jsonTag.Name = "student_name"
jsonTag.Options = nil
tags.Set(jsonTag)
if err!=nil{
    fmt.Println(err)
    return
}
stu:=Student{
    Name:"xiaoming",
}
data,err:=json.Marshal(stu)
fmt.Println(string(data))

} output {"name":"xiaoming"}

But what I want to output is {"student_name":"xiaoming"} Does this package support you? What should you do if it supports you?

fatih commented 5 years ago

Hi @chendongming0625

Unfortunately this is not supported by this package. This package let's you examine and parse struct tags. However what you want is to modify the struct fields. If you want to decode it in JSON, there is already support for that:

package main

import (
    "encoding/json"
    "fmt"
)

type Student struct {
    Name string `json:"student_name,omitempty"`
}

func main() {
    stu := Student{
        Name: "xiaoming",
    }
    data, err := json.Marshal(stu)
    if err != nil {
        panic(err)
    }

    fmt.Println(string(data))
}

This outputs:

{"student_name":"xiaoming"}

play link: https://play.golang.org/p/B6ymQEtQTAv Closing this issue and thanks again for the feedback.