تخطَّ إلى المحتوى

jsonv2.Unmarshal

تحويل JSON إلى قيمة (النسخة الثانية) jsonv2.Unmarshal

jsonv2.Unmarshal من encoding/json/v2 تقرأ JSON لقيمة Go بقواعد أدقّ من النسخة الأولى: ترفض UTF-8 غير صالح وترفض تكرار نفس المفتاح بدل تجاهلهما بصمت، وأداؤها أسرع ملحوظًا.

الفرق العملي الأكبر بين jsonv2.Unmarshal و json.Unmarshal القديمة هو التشدّد: النسخة الأولى تتسامح مع بعض حالات JSON غير الصارمة (نصوص UTF-8 غير صالحة، مفاتيح مكرَّرة بنفس الكائن تأخذ آخر قيمة بصمت). النسخة الثانية ترفض هذه الحالات صراحةً بخطأ بدل تمريرها بهدوء — مفيد جدًا عند التعامل مع JSON قادم من مصدر خارجي غير موثوق بالكامل، لأن اكتشاف مشكلة بالبيانات مبكرًا أفضل من تمريرها لمنطق البرنامج بصمت.

من ناحية الأداء، فريق Go يوثّق أن Unmarshal بالنسخة الثانية أسرع ملحوظًا من الأولى لمعظم الحالات، بعكس Marshal التي أداؤها مكافئ تقريبًا بين النسختين.

الصياغة

func Unmarshal(in []byte, out any, opts ...Options) (err error)

📄 مثال

import jsonv2 "encoding/json/v2"

type User struct {
  Name string `json:"name"`
}

var u User
err := jsonv2.Unmarshal([]byte(`{"name":"سارة"}`), &u)
if err != nil {
  log.Fatal(err)
}
fmt.Println(u.Name)   // سارة

أهم النقاط

العنصرالوظيفة
out anyمؤشّر للقيمة الهدف — بالضبط كما مع json.Unmarshal، لازم تمرير &متغيّر لا القيمة نفسها
مفاتيح مكرَّرةترفضها بخطأ صراحة، بعكس json.Unmarshal القديمة التي تأخذ آخر قيمة بصمت
UTF-8 غير صالحترفضه بخطأ بدل قبوله كما تفعل النسخة الأولى

💡 نصائح عملية

  • فضِّلها تحديدًا عند فكّ تشفير JSON قادم من مستخدم خارجي أو API طرف ثالث — رفض المدخل الفاسد مبكرًا أأمن من تمريره بصمت

⚠️ أخطاء شائعة

  • افتراض توافق سلوك كامل مع json.Unmarshal القديمة — كود يعتمد على تسامح النسخة الأولى مع بيانات غير صارمة (مفاتيح مكرَّرة مثلًا) قد يفشل بأخطاء جديدة بعد التحويل لـ v2 دون تغيير المدخل نفسه

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار GO الكامل بالعربي.