0Pricing
Go Academy · درس

فك ترميز استجابات JSON

تحليل استجابات API إلى بُنى Go

فك ترميز استجابات JSON درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

تحقق من الحالة قبل فك الترميز

تحقق دائمًا من أن حالة الاستجابة هي 2xx قبل محاولة فك ترميز الجسم. فقد تحتوي الاستجابات غير 2xx على صفحات خطأ بتنسيق HTML، وليس JSON.

if resp.StatusCode < 200 || resp.StatusCode >= 300 {
    body, _ := io.ReadAll(resp.Body)
    return fmt.Errorf("status %d: %s", resp.StatusCode, body)
}

json.NewDecoder

فك ترميز جسم الاستجابة على شكل تدفق من دون تحميله كاملًا إلى الذاكرة:

var result APIResponse
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
    return fmt.Errorf("decode: %w", err)
}

فك الترميز إلى خريطة عامة

بالنسبة إلى أشكال JSON غير المعروفة أو الديناميكية، فك الترميز إلى map[string]any:

var m map[string]any
json.NewDecoder(resp.Body).Decode(&m)

البنى المتداخلة

مثّل JSON المتداخل باستخدام بنى Go متداخلة ووسوم json:

type Repo struct {
    Name  string `json:"name"`
    Owner struct {
        Login string `json:"login"`
    } `json:"owner"`
}

الحقول الاختيارية باستخدام المؤشرات

استخدم أنواع المؤشرات لحقول JSON الاختيارية حتى تتمكن من التمييز بين «غياب الحقل» و«تعيين الحقل إلى القيمة الصفرية»:

type Response struct {
    Data  *string `json:"data"`
    Error *string `json:"error"`
}

فك ترميز المصفوفات

فك ترميز مصفوفات JSON مباشرةً إلى شرائح Go:

var users []User
json.NewDecoder(resp.Body).Decode(&users)

التحقق من أخطاء فك الترميز

ميّز بين أخطاء بناء جملة JSON وأخطاء نهاية الإدخال غير المتوقعة — إذ تعني EOF أن الجسم فارغ (لا يحتوي على JSON إطلاقًا).

err := json.NewDecoder(resp.Body).Decode(&v)
if errors.Is(err, io.EOF) {
    return fmt.Errorf("empty response body")
}

التحقق من Content-Type

تحقق من أن Content-Type للاستجابة هو application/json قبل فك الترميز، لتجنب تحليل HTML بصمت على أنه JSON.

ct := resp.Header.Get("Content-Type")
if !strings.HasPrefix(ct, "application/json") {
    return fmt.Errorf("unexpected content-type: %s", ct)
}

تجاهل الحقول غير المعروفة

يتجاهل json.Decoder بصمت حقول JSON التي لا يقابلها أي حقل في البنية. وهذا هو السلوك الافتراضي، ويكون مرغوبًا عادةً لتحقيق التوافق مع الإصدارات المستقبلية.

فك ترميز صارم باستخدام DisallowUnknownFields

استدعِ dec.DisallowUnknownFields() لإرجاع خطأ عند وجود مفاتيح غير معروفة — وهذا مفيد لتحليل إعدادات صارم، لكنه غير مناسب لاستهلاك واجهات API التابعة لجهات خارجية.

dec := json.NewDecoder(r.Body)
dec.DisallowUnknownFields()
dec.Decode(&cfg)

إعادة استخدام البنية التي فُك ترميزها

صفّر البنية قبل فك الترميز عند إعادة استخدامها مع استجابات متعددة، لتجنب بقاء بيانات قديمة من عملية فك ترميز سابقة.

var result APIResult
result = APIResult{} // reset
json.NewDecoder(resp.Body).Decode(&result)

تحقق سريع

ما الخطأ الذي يعيده json.Decoder.Decode عندما يكون جسم الاستجابة فارغًا؟

خلاصة: فك ترميز استجابات JSON

النقاط الأساسية:

  • تحقق من رمز الحالة قبل فك الترميز
  • استخدم json.NewDecoder لفك الترميز على شكل تدفق، مما يتجنب تحميل الجسم كاملًا إلى الذاكرة
  • تحقق من أن Content-Type هو application/json
  • يعني io.EOF أن الجسم فارغ؛ ويعني io.ErrUnexpectedEOF أن JSON مبتور

الأسئلة الشائعة

هل درس «فك ترميز استجابات JSON» مجاني؟

نعم — نص درس «فك ترميز استجابات JSON» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «فك ترميز استجابات JSON»؟

تحليل استجابات API إلى بُنى Go تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «فك ترميز استجابات JSON»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إجراء طلبات HTTP
  2. ضبط المهلات والترويسات
  3. فك ترميز استجابات JSON
  4. معالجة الأخطاء ومنطق إعادة المحاولة
← العودة إلى Go Academy