← العودة إلى المدونة

JSON مقابل YAML: متى تستخدم كل منهما

مقارنة شاملة بين JSON و YAML. الفروقات، الاستخدامات، المزايا والعيوب.

Big JSON Team12 دقيقة للقراءةcomparison
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

12 دقيقة قراءة

# JSON مقابل YAML: متى تستخدم كل منهما

مقارنة شاملة بين JSON و YAML لمساعدتك في اختيار التنسيق المناسب.

نظرة عامة

JSON

  • الاسم الكامل: JavaScript Object Notation
  • الامتداد: .json
  • النوع: تنسيق تبادل البيانات
  • الشيوع: واسع جداً

YAML

  • الاسم الكامل: YAML Ain't Markup Language
  • الامتداد: .yaml, .yml
  • النوع: تنسيق تسلسل البيانات
  • الشيوع: شائع في DevOps

مثال مقارن

JSON

{

"المشروع": {

"الاسم": "تطبيقي",

"النسخة": "1.0.0",

"المطورون": [

{

"الاسم": "أحمد",

"الدور": "مطور"

},

{

"الاسم": "فاطمة",

"الدور": "مصمم"

}

],

"الإعدادات": {

"البيئة": "production",

"المنفذ": 3000

}

}

}

YAML

المشروع:

الاسم: تطبيقي

النسخة: 1.0.0

المطورون:

- الاسم: أحمد

الدور: مطور

- الاسم: فاطمة

الدور: مصمم

الإعدادات:

البيئة: production

المنفذ: 3000

الفروقات الرئيسية

البنية

JSON:
  • يستخدم الأقواس {} و []
  • يتطلب فواصل
  • علامات اقتباس مزدوجة إلزامية

YAML:
  • يستخدم المسافات البادئة
  • لا يحتاج فواصل
  • علامات الاقتباس اختيارية

قابلية القراءة

JSON:
{

"الاسم": "أحمد",

"العمر": 30

}

YAML:
الاسم: أحمد

العمر: 30

YAML أكثر قابلية للقراءة للبشر.

التعليقات

JSON:
{

"الاسم": "أحمد"

}

لا يدعم التعليقات.

YAML:
# هذا تعليق

الاسم: أحمد # تعليق في نهاية السطر

يدعم التعليقات.

أنواع البيانات

JSON:
  • String
  • Number
  • Boolean
  • Null
  • Array
  • Object

YAML:
  • جميع أنواع JSON
  • Timestamp
  • Binary data
  • Multi-line strings

النصوص متعددة الأسطر

JSON:
{

"الوصف": "هذا نص\nمتعدد\nالأسطر"

}

YAML:
# حفظ فواصل الأسطر

الوصف: |

هذا نص

متعدد

الأسطر

# طي الأسطر

الوصف: >

هذا نص طويل

سيتم طيه في

سطر واحد

المزايا والعيوب

JSON

المزايا:
  • ✅ سريع في التحليل
  • ✅ دعم واسع في جميع اللغات
  • ✅ حجم أصغر
  • ✅ صارم (أقل أخطاء)
  • ✅ مناسب للـ APIs

العيوب:
  • ❌ أقل قابلية للقراءة
  • ❌ لا يدعم التعليقات
  • ❌ صياغة أكثر صرامة
  • ❌ لا يدعم المراجع

YAML

المزايا:
  • ✅ قابل للقراءة جداً
  • ✅ يدعم التعليقات
  • ✅ ميزات متقدمة
  • ✅ مرن في الصياغة
  • ✅ يدعم المراجع

العيوب:
  • ❌ أبطأ في التحليل
  • ❌ حساس للمسافات البادئة
  • ❌ أكثر عرضة للأخطاء
  • ❌ دعم أقل في بعض اللغات

حالات الاستخدام

استخدم JSON لـ:

  • APIs
  • // استجابة API
    

    fetch('/api/users')

    .then(r => r.json())

    .then(data => console.log(data));

  • تبادل البيانات
  • {
    

    "transaction": {

    "id": 12345,

    "amount": 100.50

    }

    }

  • قواعد البيانات
  • // MongoDB
    

    db.users.insertOne({

    name: "أحمد",

    age: 30

    });

  • ملفات التكوين البسيطة
  • {
    

    "port": 3000,

    "database": "mongodb://localhost/mydb"

    }

    استخدم YAML لـ:

  • ملفات التكوين
  • # config.yaml
    

    server:

    port: 3000

    host: localhost

    database:

    type: postgresql

    host: db.example.com

    port: 5432

  • Docker Compose
  • version: '3'
    

    services:

    web:

    image: nginx

    ports:

    - "80:80"

    db:

    image: postgres

    environment:

    POSTGRES_PASSWORD: secret

  • CI/CD
  • # .github/workflows/deploy.yml
    

    name: Deploy

    on:

    push:

    branches: [main]

    jobs:

    deploy:

    runs-on: ubuntu-latest

    steps:

    - uses: actions/checkout@v2

    - name: Deploy

    run: npm run deploy

  • Kubernetes
  • apiVersion: v1
    

    kind: Pod

    metadata:

    name: my-app

    spec:

    containers:

    - name: app

    image: my-app:1.0

    التحويل بين JSON و YAML

    JSON إلى YAML

    باستخدام Python:
    import json
    

    import yaml

    # قراءة JSON

    with open('data.json', 'r', encoding='utf-8') as f:

    data = json.load(f)

    # كتابة YAML

    with open('data.yaml', 'w', encoding='utf-8') as f:

    yaml.dump(data, f, allow_unicode=True, default_flow_style=False)

    باستخدام JavaScript:
    const fs = require('fs');
    

    const yaml = require('js-yaml');

    // قراءة JSON

    const jsonData = JSON.parse(fs.readFileSync('data.json', 'utf8'));

    // كتابة YAML

    const yamlStr = yaml.dump(jsonData);

    fs.writeFileSync('data.yaml', yamlStr);

    YAML إلى JSON

    باستخدام Python:
    import json
    

    import yaml

    # قراءة YAML

    with open('data.yaml', 'r', encoding='utf-8') as f:

    data = yaml.safe_load(f)

    # كتابة JSON

    with open('data.json', 'w', encoding='utf-8') as f:

    json.dump(data, f, ensure_ascii=False, indent=2)

    باستخدام JavaScript:
    const fs = require('fs');
    

    const yaml = require('js-yaml');

    // قراءة YAML

    const yamlData = yaml.load(fs.readFileSync('data.yaml', 'utf8'));

    // كتابة JSON

    fs.writeFileSync('data.json', JSON.stringify(yamlData, null, 2));

    الأداء

    JSON أسرع

    const json = require('./data.json');  // سريع جداً
    
    

    const yaml = require('js-yaml');

    const data = yaml.load(fs.readFileSync('data.yaml')); // أبطأ

    مقارنة السرعة

    | العملية | JSON | YAML |

    |---------|------|------|

    | التحليل | 1x | 2-5x أبطأ |

    | الكتابة | 1x | 2-3x أبطأ |

    | حجم الملف | أصغر | أكبر قليلاً |

    الأمان

    JSON

    // آمن عموماً
    

    const data = JSON.parse(jsonString);

    YAML

    import yaml
    
    

    # غير آمن - يمكن تنفيذ كود

    data = yaml.load(yamlString) # خطر!

    # آمن - استخدم safe_load

    data = yaml.safe_load(yamlString) # جيد

    تحذير: استخدم دائماً safe_load مع YAML.

    ميزات YAML المتقدمة

    المراجع

    # تعريف مرساة
    

    defaults: &defaults

    المنفذ: 3000

    المضيف: localhost

    # استخدام المرساة

    development:

    <<: defaults

    البيئة: development

    production:

    <<: defaults

    البيئة: production

    المنفذ: 80

    البيانات الثنائية

    صورة: !!binary |
    

    R0lGODlhDAAMAIQAAP//9/X

    17unp5WZmZgAAAOfn515eXv

    Pz7Y6OjuDg4J+fn5OTk6enp

    56enmleECcgggoBADs=

    متى تختار ماذا؟

    اختر JSON إذا:

    • تبني API
    • تحتاج أداء عالي
    • تتبادل بيانات بين أنظمة
    • تعمل مع قواعد بيانات NoSQL
    • الحجم مهم

    اختر YAML إذا:

    • تكتب ملفات تكوين
    • تريد تعليقات
    • القراءة البشرية مهمة
    • تستخدم Docker/Kubernetes
    • تحتاج ميزات متقدمة

    أمثلة من العالم الحقيقي

    package.json (JSON)

    {
    

    "name": "my-app",

    "version": "1.0.0",

    "scripts": {

    "start": "node server.js",

    "test": "jest"

    },

    "dependencies": {

    "express": "^4.17.1"

    }

    }

    docker-compose.yml (YAML)

    version: '3.8'
    
    

    services:

    app:

    build: .

    ports:

    - "3000:3000"

    environment:

    NODE_ENV: production

    depends_on:

    - db

    db:

    image: postgres:13

    environment:

    POSTGRES_PASSWORD: secret

    أدوات مفيدة

    محولات عبر الإنترنت

    • json2yaml.com
    • convertjson.com/yaml-to-json.htm

    مكتبات

    Python:
    import json    # مدمج
    

    import yaml # pip install pyyaml

    JavaScript:
    const json = JSON;         // مدمج
    

    const yaml = require('js-yaml'); // npm install js-yaml

    الملخص

    | الميزة | JSON | YAML |

    |--------|------|------|

    | قابلية القراءة | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |

    | الأداء | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |

    | التعليقات | ❌ | ✅ |

    | الميزات | بسيط | متقدم |

    | الأمان | ✅ | ⚠️ |

    | الدعم | واسع جداً | جيد |

    القاعدة الذهبية:
    • JSON للبيانات
    • YAML للتكوين

    اختر حسب احتياجاتك!

    Share:

    مقالات ذات صلة

    Read in English