ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 5 · 5లో పాఠం 4కోర్సులో 24/50~12 min
మాడ్యూల్ పాఠాలు (4/5)

ఫీల్డ్ ట్యాగ్‌లు మరియు JSON

స్ట్రక్ట్ ఫీల్డ్‌లపై ట్యాగ్‌లు మెటాడేటా స్ట్రింగ్‌లు, ప్రతిబింబం ద్వారా చదవబడతాయి encoding/json, encoding/xml, వాలిడేటర్లు, ORMలు వంటి లైబ్రరీల ద్వారా. వారు ఫీల్డ్ రకం తర్వాత వెంటనే బ్యాక్‌టిక్‌లు (రా స్ట్రింగ్) మధ్య వ్రాయబడతాయి.

వాక్యనిర్మాణం

Go
type User struct {
    Name string `json:"nome"`
    Age  int    `json:"eta,omitempty"`
}

కన్వెన్షన్ ఫార్మాట్: key:"value" ఖాళీలతో వేరు చేయబడింది (కాదు కామాలు) బహుళ కీల కోసం:

Go
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 | తో ఉంచుతుంది |

Go
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 ఉంది పూర్తిగా మినహాయించబడింది.

మార్షల్ మరియు అన్మార్షల్

Go
// struct -> JSON
b, err := json.Marshal(u)

// JSON -> struct (needs a POINTER)
var u2 User
err = json.Unmarshal(b, &u2)

Unmarshal పాయింటర్‌ను మాత్రమే అంగీకరిస్తుంది, ఎందుకంటే ఇది తప్పనిసరిగా దానిలో వ్రాయాలి విలువ ఫీల్డ్‌లు.

ఇతర సాధారణ ట్యాగ్‌లు

  • xml:"..." — encoding/xml
  • yaml:"..." — yaml.v3
  • db:"..." — sqlx / pgx
  • validate:"..." — గో-ప్లేగ్రౌండ్/వాలిడేటర్
  • form:"..." — జిన్ / ఎకో బైండింగ్

లైబ్రరీలు వాటిని ప్రతిబింబం (reflect.StructTag.Get("json")): ఎవరైనా వాటిని అర్థం చేసుకునే వరకు అవి కేవలం తీగలు మాత్రమే.

దీనిని ప్రయత్నించండి

వ్యాయామం#go.m5.l4.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

పేరు ఫీల్డ్‌కు json:"nome" ట్యాగ్‌ని మరియు వయస్సు ఫీల్డ్‌కు json:"eta" ట్యాగ్‌ని జోడించండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

ట్యాగ్‌లు ఫీల్డ్ రకం తర్వాత బ్యాక్‌టిక్‌ల మధ్య ముడి స్ట్రింగ్‌లు.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం#go.m5.l4.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

వయస్సు ఫీల్డ్‌కు omitempty ఎంపికను జోడించండి: ఇది 0 అయినప్పుడు తప్పక విస్మరించబడాలి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

ఎంపికలు పేరు తర్వాత వస్తాయి, కామాతో వేరు చేయబడతాయి: json:"nome,omitempty".

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

Quiz#go.m5.l4.e3
సిద్ధంగా ఉంది

json:"nome" మరియు json:"eta" ట్యాగ్‌లతో ఇది ఏమి ముద్రిస్తుంది?

Go
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 ఎన్‌కోడింగ్/json.
  • json.Marshal(v) ↔ json.అన్‌మార్షల్(డేటా, &v) (pointer).
  • Same mechanism for xml, yaml, db, validate, form, …