2016-06-10 95 views
10

我在爲api編寫golang庫時遇到了問題。布爾的json方面正在引發問題。JSON golang boolean omitempty

讓我們假設api調用的布爾值的默認值爲true。

如果我做

SomeValue bool `json:some_value,omitempty` 

,我不設置通過圖書館的值,該值將被設置爲true。如果我在庫中將該值設置爲false,omitempty表示false值是一個空值,所以值將通過api調用保持爲真。

讓我們拿出omitempty並讓它看起來像這樣

SomeValue bool `json:some_value` 

現在我有相反的問題,我可以將值設置爲false,但如果我不設置值,則該值將是即使我期望它是真實的,也是假的。

編輯:如何保持不必將值設置爲true而又能將值設置爲false的行爲?

+0

等待,那麼,有什麼問題嗎? – Jerrybibo

+3

當你需要區分未設定值和零值時,請使用指針。 – JimB

+0

我加了問題。讓我知道,如果這是有道理@Jerrybibo – mbfrahry

回答

11

Use pointers

package main 

import (
    "encoding/json" 
    "fmt" 
) 

type SomeStruct struct { 
    SomeValue *bool `json:"some_value,omitempty"` 
} 

func main() { 
    t := new(bool) 
    f := new(bool) 

    *t = true 
    *f = false 

    s1, _ := json.Marshal(SomeStruct{nil}) 
    s2, _ := json.Marshal(SomeStruct{t}) 
    s3, _ := json.Marshal(SomeStruct{f}) 

    fmt.Println(string(s1)) 
    fmt.Println(string(s2)) 
    fmt.Println(string(s3)) 
} 

輸出:

{} 
{"some_value":true} 
{"some_value":false} 
+0

這樣做!謝謝 – mbfrahry