مرکزی مواد پر جائیں
ماڈیول 5 · سبق 4 از 5کورس میں 24/50~12 min
ماڈیول اسباق (4/5)

فیلڈ ٹیگز اور JSON

سٹرک فیلڈز پر ٹیگز میٹا ڈیٹا سٹرنگز ہیں، جن کو عکاسی کے ذریعے پڑھا جاتا ہے۔ بذریعہ لائبریریاں جیسے encoding/json, encoding/xml, validators, ORMs۔ وہ فیلڈ کی قسم کے بالکل بعد backticks (کچی تار) کے درمیان لکھے جاتے ہیں۔

نحو

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" | Go فیلڈ کا نام رکھتا ہے لیکن 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:"..." — go-playground/validator
  • form:"..." — جن / ایکو بائنڈنگ

لائبریریاں انہیں عکاسی کے ذریعے پڑھتی ہیں (reflect.StructTag.Get("json")): وہ صرف تار ہیں جب تک کہ کوئی ان کی ترجمانی نہ کرے۔

اسے آزمائیں

ورزش#go.m5.l4.e1
کوششیں: 0لوڈ ہو رہا ہے…

json:"nome" ٹیگ کو Name فیلڈ میں اور json:"eta" ٹیگ کو Age فیلڈ میں شامل کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

ٹیگز فیلڈ کی قسم کے بالکل بعد بیک ٹِکس کے درمیان خام تار ہیں۔

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))
جواب کے اختیارات

Recap

  • ٹیگز بیک ٹِکس کے درمیان خام تار ہیں: `` key:"value" key2:"value2" \_.
  • json:"nome": rename. omitempty__PROTECTED_INLINE_ 28__-: exclude.
  • NON-exported (lowercase) fields are ignored by encoding/json.
  • json.Marshal(v) ↔ json.Unmarshal(ڈیٹا، &v) (pointer).
  • Same mechanism for xml, yaml, db, validate, form, …