如何在元帅内部省略条件结构域

时间:2018-11-11 08:41:25

标签: go

存在 MyStruct 的结构。

type MyStruct struct {
    Code        int   `json:"Code"`
    Flags       uint8 `json:"Flags"`
    OptionField int   `json:",omitempty"`
}

以下代码将其转换为json。

f := MyStruct{Code:500, OptionField:41}
r, _ := json.Marshal(f)
fmt.Println(string(r)

我需要“ OptionField”为可选。有时它应该以值[0、1、2、3,]之一存在于json中。而在另一时间,它应该从json中排除。

我的问题是:当值是零,并且int的默认值是零时,omitempty将排除它。有什么方法可以省略条件字段(例如:如果值是-1​​,则省略)。还是有任何方法可以做到。

1 个答案:

答案 0 :(得分:5)

您可以使用*int而不是int并将指针值设置为nil来忽略它。

package main

import (
    "encoding/json"
    "fmt"
)

type MyStruct struct {
    Code        int   `json:"Code"`
    Flags       uint8 `json:"Flags"`
    OptionField *int  `json:",omitempty"`
}

func format(s MyStruct) string {
    r, _ := json.Marshal(s)
    return string(r)
}

func main() {
    f := MyStruct{Code: 500, Flags: 10, OptionField: new(int)}
    fmt.Println(format(f)) // {"Code":500,"Flags":10,"OptionField":0}
    f.OptionField = nil
    fmt.Println(format(f)) // {"Code":500,"Flags":10}
}