猿问

如何使用 json.decoder 省略空的 json 字段

我试图理解为什么两个函数返回相同的输出。据我了解,省略 empty 的目的是不将该键添加到结果结构中。


我写了这个例子,我希望第一个输出没有“空”键,但由于某种原因,它的值仍然显示为 0。


package main


import (

    "encoding/json"

    "fmt"

    "strings"

)


type agentOmitEmpty struct {

    Alias   string `json:"Alias,omitempty"`

    Skilled bool   `json:"Skilled,omitempty"`

    FinID   int32  `json:"FinId,omitempty"`

    Empty   int    `json:"Empty,omitempty"`

}


type agent struct {

    Alias   string `json:"Alias"`

    Skilled bool   `json:"Skilled"`

    FinID   int32  `json:"FinId"`

    Empty   int    `json:"Empty"`

}


func main() {

    jsonString := `{

        "Alias":"Robert",

        "Skilled":true,

        "FinId":12345

    }`


    fmt.Printf("output with omit emtpy: %v\n", withEmpty(strings.NewReader(jsonString)))

    // output with omit emtpy: {Robert true 12345 0}


    fmt.Printf("output regular: %v\n", withoutEmpty(strings.NewReader(jsonString)))

    // output without omit: {Robert true 12345 0}

}


func withEmpty(r *strings.Reader) agentOmitEmpty {

    dec := json.NewDecoder(r)

    body := agentOmitEmpty{}

    err := dec.Decode(&body)

    if err != nil {

        panic(err)

    }

    return body

}


func withoutEmpty(r *strings.Reader) agent {

    dec := json.NewDecoder(r)

    body := agent{}

    err := dec.Decode(&body)

    if err != nil {

        panic(err)

    }

    return body

}


BIG阳
浏览 110回答 1
1回答

慕码人8056858

您需要定义 Empty ,*int以便在没有值时将其替换为 nil 。然后它不会保存在数据库中。
随时随地看视频慕课网APP

相关分类

Go
我要回答