أنواع قيم JSON
عرّفوا نوعًا كاملًا وآمنًا نوعيًا لقيم JSON
أنواع قيم JSON درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
ما قيمة JSON؟
يسمح JSON بمجموعة ثابتة من أشكال القيم: السلاسل النصية، والأرقام، والقيم المنطقية، وnull، والمصفوفات، والكائنات. ويمكن لنوع تكراري وصف هذه المجموعة بدقة.
type Json =
| string
| number
| boolean
| null
| Json[]
| { [k: string]: Json };
// arrays and objects nest Json again.نوع JSON التكراري
الفكرة الأساسية هي أن المصفوفات تحتوي على Json، وأن قيم الكائنات هي Json، لذلك يشير النوع إلى نفسه لتمثيل البيانات المتداخلة.
type Json =
| string | number | boolean | null
| Json[]
| { [k: string]: Json };
const x: Json = { name: "Ada", tags: ["a", "b"], active: true };
console.log(x);قيم JSON البدائية
أبسط قيم JSON هي القيم البدائية. ويمكن إسناد كل قيمة منها مباشرةً إلى Json.
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const a: Json = "hello";
const b: Json = 42;
const c: Json = true;
const d: Json = null;
console.log(a, b, c, d);مصفوفات JSON
مصفوفة JSON هي Json[]، ولذلك يمكنها احتواء مزيج من أي قيم JSON، بما في ذلك المصفوفات والكائنات المتداخلة.
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const arr: Json = [1, "two", true, null, [3, 4]];
console.log(Array.isArray(arr));كائنات JSON
يربط كائن JSON مفاتيح نصية بقيم Json من خلال توقيع فهرس، مما يسمح بتداخل عشوائي المستويات.
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const obj: Json = {
user: { name: "Ada", age: 36 },
scores: [10, 20, 30]
};
console.log(obj);JSON متداخل بعمق
نظرًا إلى أن النوع تكراري، تُكتب أنواع البنى المتداخلة بعمق بالكامل من دون أي تصريحات إضافية.
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const deep: Json = {
a: { b: { c: [1, { d: true }] } }
};
console.log(deep);ما الذي يستبعده JSON
يرفض النوع Json بشكل صحيح القيم التي لا يستطيع JSON تمثيلها، مثل undefined والدوال أو كائنات Date.
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
// const bad: Json = undefined; // Error
// const fn: Json = () => 1; // Error
const good: Json = { ok: true };
console.log(good);التحقق من أشكال JSON أثناء التشغيل
يصف النوع JSON صالحًا، لكن يظل عليك التحقق من المدخلات غير الموثوقة أثناء التشغيل. ويتحقق حارس تكراري من كل مستوى.
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
function isJson(v: unknown): v is Json {
if (v === null) return true;
const t = typeof v;
if (t === "string" || t === "number" || t === "boolean") return true;
if (Array.isArray(v)) return v.every(isJson);
if (t === "object") return Object.values(v as object).every(isJson);
return false;
}
console.log(isJson({ a: [1, 2], b: "x" }));التحليل إلى نوع Json
تعيد JSON.parse قيمة من النوع any، لذلك حوّل نتيجة التحليل إلى Json فقط بعد التحقق منها، أو اكتب نوع المتغير ثم تحقّق منه.
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const raw = "{ \"id\": 1, \"tags\": [\"a\"] }";
const parsed = JSON.parse(raw) as Json;
console.log(parsed);اجتياز قيمة Json
يمكن لزائر تكراري اجتياز أي قيمة JSON، ومعالجة القيم البدائية والمصفوفات والكائنات من خلال فحص شكلها أثناء التشغيل.
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
function countLeaves(v: Json): number {
if (Array.isArray(v)) return v.reduce((a, x) => a + countLeaves(x), 0);
if (v !== null && typeof v === "object") return Object.values(v).reduce((a, x) => a + countLeaves(x), 0);
return 1;
}
console.log(countLeaves({ a: [1, 2], b: "x" }));لماذا يُعد نوع Json مفيدًا
يوثّق نوع Json الدقيق ما يمكنه عبور حدود واجهة API الخاصة بك بالضبط، ويكتشف محاولات تسلسل القيم غير المتوافقة مع JSON أثناء الترجمة.
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
function send(payload: Json): string {
return JSON.stringify(payload);
}
console.log(send({ ok: true, items: [1, 2, 3] }));تحقق سريع: أنواع قيم JSON
اختبر مدى فهمك لأنواع قيم JSON.
مراجعة: أنواع قيم JSON
عرّفت نوعًا تكراريًا باسم Json يغطي القيم البدائية والمصفوفات والكائنات، وتعلمت ما يستبعده، وتحققت من المدخلات غير الموثوقة باستخدام حارس أنواع تكراري.
type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const data: Json = { id: 1, tags: ["a", "b"] };
console.log(JSON.stringify(data));الأسئلة الشائعة
هل درس «أنواع قيم JSON» مجاني؟
نعم — نص درس «أنواع قيم JSON» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
ماذا ستتعلم في «أنواع قيم JSON»؟
عرّفوا نوعًا كاملًا وآمنًا نوعيًا لقيم JSON تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «أنواع قيم JSON»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.