2016-06-10 3 views
10

मुझे एपीआई के लिए गोलांग लाइब्रेरी लिखने में समस्याएं आ रही हैं। बूलियन के जेसन पहलू मुद्दों का कारण बन रहा है।JSON गोलांग बूलियन omitempty

मान लें कि एक बूलियन का डिफ़ॉल्ट मान एपीआई कॉल के लिए सच है।

अगर मैं

SomeValue bool `json:some_value,omitempty` 

करते हैं और मैं पुस्तकालय के माध्यम से मूल्य निर्धारित नहीं करते हैं, मान सही पर सेट कर दिया जाएगा। यदि मैं लाइब्रेरी में मान को गलत पर सेट करता हूं, तो omitempty का कहना है कि एक झूठा मान एक खाली मान है, इसलिए मूल्य एपीआई कॉल के माध्यम से सच रहेगा।

के omitempty बाहर ले चलते हैं और यह इस

SomeValue bool `json:some_value` 

की तरह लग रही अब मैं विपरीत मुद्दा है, मैं मूल्य गलत पर सेट कर सकते हैं लेकिन अगर मैं मान सेट नहीं करते तो मूल्य होगा हालांकि मैं यह सच होने की उम्मीद करता हूं।

संपादित करें: मान को गलत पर सेट करने में सक्षम होने के बावजूद मैं मूल्य को सही सेट करने के व्यवहार को कैसे बनाए रखूं?

+0

प्रतीक्षा, हां, तो क्या सवाल है? – Jerrybibo

+3

जब आपको अनसेट और शून्य मानों के बीच अंतर करने की आवश्यकता होती है, तो पॉइंटर का उपयोग करें। – JimB

+0

मैंने सवाल जोड़ा। मुझे बताएं अगर यह समझ में आता है @ जेरीबिबो – 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