结构体中的json标签是否真的需要封送处理?

时间:2019-10-04 17:15:32

标签: json go marshalling

我很想知道是否有办法做到这一点:

type Example struct {
  Name    string   `json:"name"`
  Value   string   `json:"value"`
}

成为这个:

type Example struct {
  Name    string
  Value   string
}

仍然允许JSON封送/拆封吗?是否有一个库或一种方法来自动假定或注入这些标签,而不必在每个struct字段中都明确显示?

1 个答案:

答案 0 :(得分:0)

默认情况下,它将被编码为

{ 
    "Name": "",
    "Value": ""
}

但是go是写在go上的,如果您真的很想小写而没有标签,则可以“ fork” encoding/json包,将其重新创建为您自己的包,并在encode.go中更改行为(第1151行)在1.13版中):

// Record found field and index sequence.    
if name != "" || !sf.Anonymous || ft.Kind() != reflect.Struct {
        tagged := name != ""
        if name == "" {
           name = sf.Name <-- here, for example to strings.ToLower(sf.Name)
        }
        ....

我不建议您这样做,但是它可以:)