我需要从mongo数据库中获取一个项目,所以我定义了一个像这样的结构
type Page struct {
PageId string `bson:"pageId"`
Meta map[string]interface{} `bson:"meta"`
}
Run Code Online (Sandbox Code Playgroud)
现在我还需要将它编码为JSON,但它将字段编码为大写(我得到PageId而不是pageId)所以我还需要为JSON定义字段标签.我试过这样的东西,但它不起作用:
type Page struct {
PageId string `bson:"pageId",json:"pageId"`
Meta map[string]interface{} `bson:"meta",json:"pageId"`
}
Run Code Online (Sandbox Code Playgroud)
那么如何做到这一点,在结构中定义多个名称标签?
我向服务器发送请求并收到 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)
提前致谢。
我从外部源获取JSON数据.这个JSON中的字段名称不是我想带的东西,所以我将它们转换为使用json:"originalname"标签对我有意义的名称.
当我将这样的对象编组回JSON时,我自然会再次获得丑陋的(原始)名称.
编组时是否有办法忽略标签?或者为马歇尔和unmarshall指定不同名称的方法?
为了澄清,我在操场上准备了一个例子,并在下面粘贴了相同的代码.
提前致谢.
package main
import (
"encoding/json"
"fmt"
)
type Band struct {
Name string `json:"bandname"`
Albums int `json:"albumcount"`
}
func main() {
// JSON -> Object
data := []byte(`{"bandname": "AC/DC","albumcount": 10}`)
band := &Band{}
json.Unmarshal(data, band)
// Object -> JSON
str, _ := json.Marshal(band)
fmt.Println("Actual Result: ", string(str))
fmt.Println("Desired Result:", `{"Name": "AC/DC","Albums": 10}`)
// Output:
// Actual Result: {"bandname":"AC/DC","albumcount":10}
// Desired Result: {"Name": "AC/DC","Albums": 10}
}
Run Code Online (Sandbox Code Playgroud)