JSON مقابل YAML: متى تستخدم كل منهما
مقارنة شاملة بين JSON و YAML. الفروقات، الاستخدامات، المزايا والعيوب.
Big JSON Team
• Technical WriterExpert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.
# 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:- يستخدم الأقواس {} و []
- يتطلب فواصل
- علامات اقتباس مزدوجة إلزامية
- يستخدم المسافات البادئة
- لا يحتاج فواصل
- علامات الاقتباس اختيارية
قابلية القراءة
JSON:{
"الاسم": "أحمد",
"العمر": 30
}
YAML:
الاسم: أحمد
العمر: 30
YAML أكثر قابلية للقراءة للبشر.
التعليقات
JSON:{
"الاسم": "أحمد"
}
لا يدعم التعليقات.
YAML:# هذا تعليق
الاسم: أحمد # تعليق في نهاية السطر
يدعم التعليقات.
أنواع البيانات
JSON:- String
- Number
- Boolean
- Null
- Array
- Object
- جميع أنواع JSON
- Timestamp
- Binary data
- Multi-line strings
النصوص متعددة الأسطر
JSON:{
"الوصف": "هذا نص\nمتعدد\nالأسطر"
}
YAML:
# حفظ فواصل الأسطر
الوصف: |
هذا نص
متعدد
الأسطر
# طي الأسطر
الوصف: >
هذا نص طويل
سيتم طيه في
سطر واحد
المزايا والعيوب
JSON
المزايا:- ✅ سريع في التحليل
- ✅ دعم واسع في جميع اللغات
- ✅ حجم أصغر
- ✅ صارم (أقل أخطاء)
- ✅ مناسب للـ APIs
- ❌ أقل قابلية للقراءة
- ❌ لا يدعم التعليقات
- ❌ صياغة أكثر صرامة
- ❌ لا يدعم المراجع
YAML
المزايا:- ✅ قابل للقراءة جداً
- ✅ يدعم التعليقات
- ✅ ميزات متقدمة
- ✅ مرن في الصياغة
- ✅ يدعم المراجع
- ❌ أبطأ في التحليل
- ❌ حساس للمسافات البادئة
- ❌ أكثر عرضة للأخطاء
- ❌ دعم أقل في بعض اللغات
حالات الاستخدام
استخدم JSON لـ:
// استجابة 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
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
db:
image: postgres
environment:
POSTGRES_PASSWORD: secret
# .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
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 للتكوين
اختر حسب احتياجاتك!
مقالات ذات صلة
ما هو JSON؟ دليل شامل للمبتدئين
تعلم ما هو JSON، قواعد الصياغة، أنواع البيانات، وحالات الاستخدام. دليل شامل للمبتدئين لفهم JavaScript Object Notation وأهميته في تطوير البرمجيات الحديثة.
ملف JSON: البنية والاستخدامات والأمثلة
دليل شامل لفهم بنية ملفات JSON، الامتدادات، التنسيق، وأفضل الممارسات.
JSON مقابل XML: أيهما أفضل لمشروعك؟
مقارنة شاملة بين JSON و XML من حيث الأداء، سهولة الاستخدام، والحالات المثلى لكل منهما.