Is it possible to have a struct with multiple JSON tags?

我只是一个虾纸丫 提交于 2020-01-21 11:52:12

问题


I post a request to a server and get a reply in JSON format. I'm able to unmarshal it to a struct. Then I need to create a new JSON file with the same data but different JSON tags.

Example:

In the following code, I get {"name":"Sam","age":20} from a server and unmarshal it to the struct Foo:

type Foo struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

Then I need to change the tag name to employee_name and omit age:

type Bar struct {
    Name string `json:"employee_name"`
    Age  int    `json:"-"`
}

After that I send this modified data to another server.

I know I could just create a new Bar and copy all data into it, but there are a lot of fields. I was wondering if there is a way to attach multiple JSON tags like this:

type Foo struct {
    Name string `json:"name" json:"employee_name"`
    Age  int    `json:"age" json:"-"`
}        

Thanks in advance.


回答1:


It's not possible. The encoding/json package only handles the json key in struct tags. If the json key is listed multiple times (as in your example), the first occurrence will be used (this is implemented in StructTag.Get()).

Note that this is an implementation restriction of the encoding/json package and not that of Go. One could easily create a similar JSON encoding package supporting either multiple tag keys (e.g. json1, json2) or multiple occurrences of the same key (as in your example).




回答2:


What is possible though, with 2 identically laid out structs (namin, types and ordering of fields needs to match exactly) is to cast from one to the other. I would be very cautious of doing this though and make sure the 2nd type (bar in your example) is unexported to prevent from being used elsewhere.

https://play.golang.org/p/y8EH1U9_3jN



来源:https://stackoverflow.com/questions/37118263/is-it-possible-to-have-a-struct-with-multiple-json-tags

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!