相关疑难解决方法(0)

如何在结构中定义多个名称标记

我需要从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 struct go

119
推荐指数
2
解决办法
4万
查看次数

是否可以有一个包含多个 JSON 标签的结构?

我向服务器发送请求并收到 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)

然后我需要将标签更改nameemployee_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 struct go

9
推荐指数
2
解决办法
8344
查看次数

编组时忽略JSON标记

我从外部源获取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)

json go

2
推荐指数
1
解决办法
1101
查看次数

标签 统计

go ×3

json ×3

struct ×2