dongxiezhi0590 2015-05-25 20:18
浏览 3429
已采纳

在Go中解析JSON时如何指定默认值

I want to parse a JSON object in Go, but want to specify default values for fields that are not given. For example, I have the struct type:

type Test struct {
    A string
    B string
    C string
}

The default values for A, B, and C, are "a", "b", and "c" respectively. This means that when I parse the json:

{"A": "1", "C": 3}

I want to get the struct:

Test{A: "1", B: "b", C: "3"}

Is this possible using the built-in package encoding/json? Otherwise, is there any Go library that has this functionality?

  • 写回答

2条回答 默认 最新

  • dqpciw9742 2015-05-25 20:18
    关注

    This is possible using encoding/json: when calling json.Unmarshal, you do not need to give it an empty struct, you can give it one with default values.

    For your example:

    var example []byte = []byte(`{"A": "1", "C": "3"}`)
    
    out := Test{
        A: "default a",
        B: "default b",
        // default for C will be "", the empty value for a string
    }
    err := json.Unmarshal(example, &out) // <--
    if err != nil {
        panic(err)
    }
    fmt.Printf("%+v", out)
    

    Running this example in the Go playground returns {A:1 B:default b C:3}.

    As you can see, json.Unmarshal(example, &out) unmarshals the JSON into out, overwriting the values specified in the JSON, but leaving the other fields unchanged.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?