我向服务器发送请求并收到 JSON 格式的回复。我能够将其解组为结构。然后我需要创建一个具有相同数据但不同 JSON 标签的新 JSON 文件。
例子:
在下面的代码中,我{"name":"Sam","age":20}从服务器获取并将其解组到 struct Foo:
type Foo struct {
Name string `json:"name"`
Age int `json:"age"`
}
Run Code Online (Sandbox Code Playgroud)
然后我需要将标签更改name为employee_name并省略age:
type Bar struct {
Name string `json:"employee_name"`
Age int `json:"-"`
}
Run Code Online (Sandbox Code Playgroud)
之后我将修改后的数据发送到另一台服务器。
我知道我可以创建一个新的Bar并将所有数据复制到其中,但是有很多字段。我想知道是否有一种方法可以附加多个 JSON 标签,如下所示:
type Foo struct {
Name string `json:"name" json:"employee_name"`
Age int `json:"age" json:"-"`
}
Run Code Online (Sandbox Code Playgroud)
提前致谢。
这是不可能的。该encoding/json包仅处理json结构标签中的键。如果json多次列出该键(如您的示例中所示),则将使用第一次出现的键(这在 中实现StructTag.Get())。
请注意,这是包的实现限制encoding/json,而不是 Go 的实现限制。人们可以轻松创建一个类似的 JSON 编码包,支持多个标签键(例如json1, json2)或同一键的多次出现(如您的示例中所示)。
不过,对于 2 个布局相同的结构(namen、字段的类型和顺序需要完全匹配),可以从一个结构体转换为另一个结构体。不过,我会非常谨慎地这样做,并确保第二种类型(示例中的 bar)未导出,以防止在其他地方使用。
https://play.golang.org/p/y8EH1U9_3jN
| 归档时间: |
|
| 查看次数: |
8344 次 |
| 最近记录: |