मॉड्यूल पाठ (4/5)
फ़ील्ड टैग और JSON
संरचना फ़ील्ड पर टैग मेटाडेटा स्ट्रिंग हैं, जिन्हें प्रतिबिंब के माध्यम से पढ़ा जाता है
encoding/json, encoding/xml, सत्यापनकर्ता, ORM जैसे पुस्तकालयों द्वारा। वे
फ़ील्ड के प्रकार के ठीक बाद बैकटिक्स (कच्ची स्ट्रिंग) के बीच लिखे जाते हैं।
सिंटेक्स
type User struct {
Name string `json:"nome"`
Age int `json:"eta,omitempty"`
}प्रारूप परिपाटी: key:"value" रिक्त स्थान से अलग (नहीं)।
अनेक कुंजियों के लिए अल्पविराम:
type User struct {
Email string `json:"email" validate:"required,email"`
}json टैग: विकल्प
सबसे आम विकल्प json है, जिसका उपयोग encoding/json द्वारा किया जाता है:
| टैग | प्रभाव |
| ----------------------- | ----------------------------------------------------- | ------ |
| json:"nome" | JSON आउटपुट में फ़ील्ड का नाम बदलकर nome कर देता है |
| json:"nome,omitempty" | यदि फ़ील्ड अपने शून्य मान पर है तो उसे छोड़ देता है |
| json:"-" | इस फ़ील्ड को क्रमबद्ध/डिसेरिएलाइज़ न करें |
| json:",omitempty" | गो फ़ील्ड नाम रखता है लेकिन omitempty | के साथ |
type User struct {
Name string `json:"nome"`
Age int `json:"eta,omitempty"`
Password string `json:"-"`
}
u := User{Name: "Ada", Age: 0, Password: "segreto"}
b, _ := json.Marshal(u)
fmt.Println(string(b)) // {"nome":"Ada"}Age हटा दिया गया है (शून्य मान 0 + omitempty); Password है
पूरी तरह से बहिष्कृत.
मार्शल और अनमर्शल
// struct -> JSON
b, err := json.Marshal(u)
// JSON -> struct (needs a POINTER)
var u2 User
err = json.Unmarshal(b, &u2)Unmarshal केवल एक पॉइंटर स्वीकार करता है, क्योंकि इसे इसमें लिखना होगा
मान के फ़ील्ड.
अन्य सामान्य टैग
xml:"..."—encoding/xmlyaml:"..."— yaml.v3db:"..."— sqlx / pgxvalidate:"..."— गो-प्लेग्राउंड/सत्यापनकर्ताform:"..."- जिन/इको बाइंडिंग
पुस्तकालय उन्हें प्रतिबिंब के माध्यम से पढ़ते हैं (reflect.StructTag.Get("json")):
वे तब तक केवल तार हैं जब तक कोई उनकी व्याख्या नहीं करता।
इसे अजमाएं
नाम फ़ील्ड में json:"nome" टैग और आयु फ़ील्ड में json:"eta" टैग जोड़ें।
संकेत दिखाएँ
टैग फ़ील्ड प्रकार के ठीक बाद बैकटिक्स के बीच कच्ची स्ट्रिंग हैं।
3 प्रयासों के बाद समाधान उपलब्ध है
आयु फ़ील्ड में ओमिटेम्प्टी विकल्प जोड़ें: 0 होने पर इसे छोड़ दिया जाना चाहिए।
संकेत दिखाएँ
विकल्प नाम के बाद आते हैं, अल्पविराम से अलग किए जाते हैं: json:"nome,omitempty"।
3 प्रयासों के बाद समाधान उपलब्ध है
यह json:"nome" और json:"eta" टैग के साथ क्या प्रिंट करता है?
u := User{Name: "Ada", Age: 36}
b, _ := json.Marshal(u)
fmt.Println(string(b))संक्षिप्त
- टैग बैकटिक्स के बीच कच्चे तार हैं:
`key:"value" key2:"value2"`. json:"nome": rename.omitempty: omit if zero value.-: exclude.- NON-exported (lowercase) fields are ignored by
encoding/json. json.Marshal(v)↔json.Unmarshal(data, &v)(pointer).- Same mechanism for
xml,yaml,db,validate,form, ...