العمل مع JSON في TypeScript: تحليل البيانات وتسلسلها

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة

JSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات يُستخدم على نطاق واسع في تطوير الويب لنقل المعلومات بين العميل والخادم. TypeScript، باعتبارها مجموعة شاملة من JavaScript ذات كتابة صارمة، توفر أدوات قوية للعمل الآمن والمريح مع JSON. في هذه المقالة، سننظر بالتفصيل في كيفية إجراء تحليل (Parsing) وتسلسل (Serialization) JSON في TypeScript، واستخدام الأنواع لضمان صحة البيانات وتجنب الأخطاء الشائعة.

العمل الصحيح مع JSON أمر بالغ الأهمية لإنشاء تطبيقات موثوقة وقابلة للتوسع. يتيح TypeScript ليس فقط تحويل سلاسل JSON إلى كائنات والعكس، بل وأيضًا ضمان أن بنية البيانات وأنواعها تتوافق مع المتوقع. هذا مفيد بشكل خاص عند العمل مع APIs وملفات التكوين وقواعد البيانات.



أساسيات تحليل JSON في TypeScript

تحليل JSON هو عملية تحويل سلسلة JSON إلى كائن TypeScript. لهذا، يتم استخدام الطريقة العامة JSON.parse(). ومع ذلك، على عكس JavaScript، في TypeScript يمكننا تحديد النوع المتوقع للنتيجة، مما يجعل الكود أكثر قابلية للتنبؤ.



تحليل بسيط بدون أنواع

مثال أساسي لتحليل سلسلة JSON:

const jsonString = '{"name": "Анна", "age": 30, "city": "Москва"}';const user = JSON.parse(jsonString);console.log(user.name); // "Анна"

في هذه الحالة، سيستنتج TypeScript النوع any للمتغير user، مما يقلل من أمان الأنواع. من الأفضل استخدام تحديد نوع صريح.



تحليل مع تحديد النوع عبر واجهة (Interface)

النهج الأكثر صحة هو تعريف واجهة واستخدامها أثناء التحليل:

interface User {  name: string;  age: number;  city: string;}

const jsonString = '{"name": "Анна", "age": 30, "city": "Москва"}';const user: User = JSON.parse(jsonString);console.log(user.name); // TypeScript يعرف أن هذا string

يسمح هذا النهج لبيئة التطوير (IDE) بتوفير الإكمال التلقائي والتحقق من الأنواع في مرحلة الترجمة.



معالجة أخطاء التحليل

قد تكون سلاسل JSON غير صحيحة، لذلك من المهم معالجة الاستثناءات:

function safeParseJSON<T>(json: string): T | null {  try {    return JSON.parse(json) as T;  } catch (error) {    console.error('خطأ في تحليل JSON:', error);    return null;  }}

const invalidJson = '{"name": "Анна", age: 30}'; // JSON غير صحيحconst result = safeParseJSON<User>(invalidJson);if (result) { console.log(result.name);} else { console.log('فشل تحليل JSON');}

تأخذ الدالة safeParseJSON معاملًا عامًا (Generic)، مما يسمح بإعادة استخدامها لأنواع بيانات مختلفة.



تسلسل الكائنات إلى JSON

التسلسل هو العملية العكسية لتحويل كائن TypeScript إلى سلسلة JSON. لهذا، يتم استخدام الطريقة JSON.stringify(). لا يضيف TypeScript إمكانيات جديدة لهذه الطريقة، ولكنه يساعد في التحكم في البيانات التي تدخل في السلسلة النهائية.



تسلسل أساسي

const user: User = {  name: "Иван",  age: 25,  city: "Санкт-Петербург"};

const jsonString = JSON.stringify(user);console.log(jsonString); // {"name":"Иван","age":25,"city":"Санкт-Петербург"}


استخدام Replacer لتصفية الحقول

المعامل الثاني لـ JSON.stringify() هو دالة replacer، التي تسمح بالتحكم في الحقول التي سيتم تضمينها في النتيجة:

const jsonStringFiltered = JSON.stringify(user, (key, value) => {  if (key === 'age') {    return undefined; // استبعاد حقل age  }  return value;});console.log(jsonStringFiltered); // {"name":"Иван","city":"Санкт-Петербург"}

هذا مفيد عندما تحتاج إلى إخفاء البيانات الحساسة أو تقليل حجم المعلومات المرسلة.



التنسيق باستخدام Space

المدونات

توصيات الكتب