JSON در PHP یکی از مهمترین مباحثی است که هر برنامهنویس PHP برای توسعه برنامههای وب و API باید آن را یاد بگیرد. امروزه بسیاری از Applicationها، سرویسهای تحت وب و APIها برای تبادل اطلاعات بین Frontend و Backend یا ارتباط بین دو سرویس مختلف از JSON استفاده میکنند.
برای مثال ممکن است یک API اطلاعات کاربر را به شکل زیر برگرداند:
{
"name": "Ali",
"email": "ali@example.com",
"age": 25
}
در PHP میتوان این اطلاعات را دریافت و پردازش کرد.
از طرف دیگر، ممکن است بخواهیم یک Array در PHP را به JSON تبدیل کنیم و به یک API ارسال کنیم.
دو تابع بسیار مهم PHP برای کار با JSON عبارتاند از:
json_encode()
و:
json_decode()
در این آموزش از پایه با JSON آشنا میشویم و سپس نحوه تبدیل Array و Object به JSON، خواندن JSON، مدیریت خطا، کار با JSON فارسی و استفاده از JSON در APIهای PHP را بررسی میکنیم.
# JSON چیست؟
JSON مخفف JavaScript Object Notation است.
JSON یک فرمت متنی و سبک برای ذخیره و انتقال داده است.
ساختار ساده یک JSON Object:
{
"name": "Ali",
"age": 25
}
در این مثال دو Property داریم:
name
age
و مقادیر آنها عبارتاند از:
Ali
25
JSON به دلیل سادگی و خوانایی بالا، یکی از رایجترین فرمتهای تبادل داده در Web APIها است.
# چرا JSON در PHP اهمیت دارد؟
PHP معمولاً در سمت Backend اجرا میشود، در حالی که Frontend ممکن است با JavaScript، React، Vue یا سایر فناوریها ساخته شده باشد.
برای ارتباط بین این بخشها باید دادهها در قالبی استاندارد منتقل شوند.
یکی از رایجترین ساختارها:
Frontend
↓
HTTP Request
↓
PHP API
↓
Database
↓
PHP API
↓
JSON Response
↓
Frontend
در این معماری JSON نقش بسیار مهمی در انتقال داده دارد.
# ساختار JSON
یک JSON Object معمولاً به شکل زیر نوشته میشود:
{
"name": "Ali",
"age": 25,
"active": true
}
مقادیر JSON میتوانند شامل انواع مختلفی باشند:
- String
- Number
- Boolean
- Array
- Object
- null
مثلاً:
{
"name": "Ali",
"age": 25,
"skills": ["PHP", "Laravel"],
"active": true,
"address": null
}
# تفاوت JSON و Array در PHP
Array یک ساختار داده داخلی در PHP است:
$user = [
'name' => 'Ali',
'age' => 25
];
اما JSON یک String است:
$json = '{"name":"Ali","age":25}';
بنابراین:
PHP Array
↓
json_encode()
↓
JSON String
و برعکس:
JSON String
↓
json_decode()
↓
PHP Array/Object
# تبدیل Array به JSON با json_encode
مهمترین تابع PHP برای تبدیل دادههای PHP به JSON، json_encode() است.
مثلاً:
$user = [
'name' => 'Ali',
'age' => 25
];
$json = json_encode($user);
echo $json;
خروجی:
{"name":"Ali","age":25}
# تبدیل Array چندبعدی به JSON
json_encode() میتواند Arrayهای پیچیدهتر را نیز به JSON تبدیل کند.
$users = [
[
'name' => 'Ali',
'age' => 25
],
[
'name' => 'Sara',
'age' => 28
]
];
echo json_encode($users);
خروجی:
[
{
"name": "Ali",
"age": 25
},
{
"name": "Sara",
"age": 28
}
]
این ساختار در APIها بسیار رایج است.
# JSON و متن فارسی در PHP
یکی از نکات مهم برای برنامهنویسان ایرانی، نحوه کار با JSON و متن فارسی است.
مثلاً:
$data = [
'name' => 'سعید',
'language' => 'PHP'
];
echo json_encode($data);
ممکن است خروجی شامل Unicode Escape باشد.
برای خوانایی بهتر JSON فارسی میتوان از:
JSON_UNESCAPED_UNICODE
استفاده کرد:
$json = json_encode(
$data,
JSON_UNESCAPED_UNICODE
);
echo $json;
خروجی خواناتر خواهد بود:
{
"name": "سعید",
"language": "PHP"
}
# JSON_UNESCAPED_SLASHES چیست؟
به صورت پیشفرض ممکن است Slashها در JSON به شکل Escape شده نمایش داده شوند.
برای جلوگیری از این موضوع میتوان از:
JSON_UNESCAPED_SLASHES
استفاده کرد.
مثلاً:
$data = [
'url' => 'https://example.com'
];
echo json_encode(
$data,
JSON_UNESCAPED_SLASHES
);
# استفاده همزمان از چند JSON Flag
میتوان چند Flag را با | ترکیب کرد:
$json = json_encode(
$data,
JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
);
این روش هنگام تولید JSON برای APIها بسیار کاربردی است.
# تبدیل JSON به PHP با json_decode
تابع اصلی برای خواندن JSON در PHP، json_decode() است.
فرض کنید:
$json = '{"name":"Ali","age":25}';
میتوان آن را Decode کرد:
$data = json_decode($json);
echo $data->name;
در این حالت نتیجه به صورت Object برمیگردد.
# تبدیل JSON به Associative Array
اگر بخواهیم نتیجه json_decode() به صورت Array باشد، پارامتر دوم را true قرار میدهیم:
$json = '{"name":"Ali","age":25}';
$data = json_decode($json, true);
echo $data['name'];
اکنون $data یک Associative Array است.
# تفاوت json_decode با و بدون true
بدون true:
$data = json_decode($json);
echo $data->name;
با true:
$data = json_decode($json, true);
echo $data['name'];
بنابراین باید بدانید که قرار است با Object کار کنید یا Array.
# خواندن JSON چندبعدی
مثلاً:
{
"name": "Ali",
"skills": [
"PHP",
"Laravel",
"MySQL"
]
}
با PHP:
$json = '{
"name": "Ali",
"skills": ["PHP", "Laravel", "MySQL"]
}';
$data = json_decode($json, true);
echo $data['name'];
echo $data['skills'][0];
خروجی:
Ali
PHP
# بررسی خطای JSON
یکی از نکات مهم هنگام کار با JSON، بررسی معتبر بودن داده ورودی است.
مثلاً:
$json = '{"name":"Ali"}';
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo 'JSON نامعتبر است';
}
این روش در نسخههای مختلف PHP قابل استفاده است.
# استفاده از JSON_THROW_ON_ERROR
در کدهای جدیدتر میتوان از:
JSON_THROW_ON_ERROR
استفاده کرد.
مثلاً:
try {
$data = json_decode(
$json,
true,
512,
JSON_THROW_ON_ERROR
);
} catch (JsonException $e) {
echo $e->getMessage();
}
این روش باعث میشود خطای JSON به شکل Exception مدیریت شود.
در پروژههای حرفهای، این روش میتواند مدیریت خطا را واضحتر کند.
# تبدیل JSON به Object
مثلاً:
$json = '{"name":"Ali","age":25}';
$user = json_decode($json);
echo $user->name;
echo $user->age;
# تبدیل JSON به Array
$json = '{"name":"Ali","age":25}';
$user = json_decode($json, true);
echo $user['name'];
echo $user['age'];
# تبدیل Object به JSON
اگر یک Object داشته باشیم، json_encode() میتواند آن را نیز در شرایط مناسب به JSON تبدیل کند.
مثلاً:
$user = new stdClass();
$user->name = 'Ali';
$user->age = 25;
echo json_encode($user);
خروجی:
{"name":"Ali","age":25}
# JSON و Boolean
مقادیر Boolean در PHP:
true
false
در JSON نیز به شکل:
true
false
ذخیره میشوند.
مثلاً:
$data = [
'active' => true,
'verified' => false
];
echo json_encode($data);
خروجی:
{
"active": true,
"verified": false
}
# JSON و Null
مقدار null در PHP نیز به JSON تبدیل میشود:
$data = [
'name' => 'Ali',
'phone' => null
];
echo json_encode($data);
خروجی:
{
"name": "Ali",
"phone": null
}
# JSON و Number
اعداد PHP معمولاً به Number در JSON تبدیل میشوند:
$data = [
'age' => 25,
'price' => 125000.50
];
echo json_encode($data);
# تفاوت Array عددی و Associative Array
این موضوع هنگام استفاده از json_encode() بسیار مهم است.
مثلاً:
$data = ['PHP', 'Laravel', 'MySQL'];
echo json_encode($data);
خروجی Array در JSON خواهد بود:
["PHP","Laravel","MySQL"]
اما:
$data = [
'language' => 'PHP',
'framework' => 'Laravel'
];
echo json_encode($data);
خروجی Object خواهد بود:
{
"language": "PHP",
"framework": "Laravel"
}
# JSON در APIهای PHP
یکی از مهمترین کاربردهای JSON در PHP، ساخت REST API است.
فرض کنید API اطلاعات کاربر را برمیگرداند:
header('Content-Type: application/json');
$user = [
'id' => 1,
'name' => 'Ali',
'email' => 'ali@example.com'
];
echo json_encode($user);
Header زیر اعلام میکند که پاسخ API از نوع JSON است:
Content-Type: application/json
# ساخت JSON Response استاندارد
بهتر است APIهای واقعی ساختار پاسخ مشخصی داشته باشند.
مثلاً:
$response = [
'success' => true,
'message' => 'اطلاعات با موفقیت دریافت شد',
'data' => [
'id' => 1,
'name' => 'Ali'
]
];
header('Content-Type: application/json');
echo json_encode(
$response,
JSON_UNESCAPED_UNICODE
);
پاسخ:
{
"success": true,
"message": "اطلاعات با موفقیت دریافت شد",
"data": {
"id": 1,
"name": "Ali"
}
}
این ساختار میتواند در پروژههای کوچک و بزرگ قابل استفاده باشد، البته طراحی دقیق Response باید بر اساس قرارداد API انجام شود.
# ارسال JSON با HTTP Request
فرض کنید PHP باید اطلاعاتی را به یک API ارسال کند.
ابتدا داده را ایجاد میکنیم:
$data = [
'name' => 'Ali',
'email' => 'ali@example.com'
];
$json = json_encode($data);
سپس در یک HTTP Request قرار میدهیم.
با cURL:
$ch = curl_init('https://example.com/api/users');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $json,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Accept: application/json'
]
]);
$response = curl_exec($ch);
curl_close($ch);
در اینجا JSON در Body درخواست ارسال میشود.
# دریافت JSON از API
فرض کنید API پاسخ زیر را برگرداند:
{
"success": true,
"user": {
"name": "Ali"
}
}
میتوانیم Response را Decode کنیم:
$data = json_decode($response, true);
echo $data['user']['name'];
# دریافت JSON از Request Body
در یک API PHP ممکن است Client یک JSON Request ارسال کند.
برای دریافت Body خام:
$input = file_get_contents('php://input');
سپس:
$data = json_decode($input, true);
اکنون میتوان اطلاعات JSON را پردازش کرد.
مثلاً:
$name = $data['name'] ?? null;
$email = $data['email'] ?? null;
البته قبل از استفاده از این دادهها باید Validation مناسب انجام شود.
# بررسی Content-Type درخواست
در API بهتر است نوع داده ورودی نیز بررسی شود.
مثلاً:
Content-Type: application/json
به این معنی است که Client انتظار دارد Body را به عنوان JSON پردازش کنید.
در APIهای واقعی، علاوه بر Content-Type باید اعتبار JSON، ساختار داده، Authentication و Validation نیز بررسی شوند.
# JSON و SQL Database
JSON ممکن است از Database دریافت شود یا اطلاعات Database به JSON تبدیل شود.
مثلاً:
$user = [
'id' => 1,
'name' => 'Ali'
];
echo json_encode($user);
در یک Application واقعی معمولاً مسیر به این شکل است:
Database
↓
PHP
↓
Array / Object
↓
json_encode()
↓
API Response
# JSON در Laravel
اگر بعداً وارد Laravel شوید، استفاده از JSON بسیار سادهتر و ساختاریافتهتر میشود.
مثلاً یک Route میتواند داده JSON برگرداند:
return response()->json([
'success' => true,
'message' => 'OK'
]);
Laravel همچنین برای Requestها، API Resourceها، Validation و Authentication ابزارهای مختلفی ارائه میکند.
به همین دلیل یادگیری JSON در PHP پایه بسیار خوبی برای ورود به REST API در Laravel است.
# JSON و UTF-8
JSON باید با Encoding مناسب پردازش شود. برای پروژههای فارسی، UTF-8 اهمیت ویژهای دارد.
برای تولید JSON خوانا:
$json = json_encode(
$data,
JSON_UNESCAPED_UNICODE
);
همچنین هنگام ارسال Response بهتر است Header مناسب تنظیم شود:
header('Content-Type: application/json; charset=utf-8');
# Pretty Print کردن JSON
برای اینکه JSON برای انسان خواناتر باشد، میتوان از:
JSON_PRETTY_PRINT
استفاده کرد.
مثلاً:
$json = json_encode(
$data,
JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE
);
خروجی خواناتر خواهد بود:
{
"name": "علی",
"age": 25,
"skills": [
"PHP",
"Laravel"
]
}
برای APIهای Production معمولاً نیازی نیست صرفاً برای زیبایی، JSON را Pretty Print کنیم؛ چون حجم Response را افزایش میدهد.
# عمق Decode در JSON
json_decode() امکان تعیین Maximum Depth را نیز دارد:
$data = json_decode(
$json,
true,
512,
JSON_THROW_ON_ERROR
);
عدد 512 مقدار Depth پیشفرض رایج این API است.
برای دادههای غیرقابل اعتماد، بهتر است محدودیتها و مدیریت خطا را متناسب با Application در نظر بگیرید.
# JSON و امنیت
JSON به خودی خود مشکل امنیتی محسوب نمیشود، اما دادهای که از کاربر یا یک سرویس خارجی دریافت میکنید قابل اعتماد نیست.
مثلاً این داده:
{
"username": "admin"
}
باید قبل از استفاده Validation شود.
نباید فرض کنیم چون داده در قالب JSON است، پس امن است.
در APIهای واقعی باید مواردی مانند:
- Authentication
- Authorization
- Validation
- Rate Limiting
- کنترل حجم Request
- مدیریت خطا
- جلوگیری از Injection
- ثبت Log مناسب
را نیز در نظر گرفت.
# تفاوت JSON و XML
JSON و XML هر دو برای انتقال داده استفاده میشوند.
JSON معمولاً:
- سادهتر است.
- حجم کمتری دارد.
- برای APIهای مدرن بسیار رایج است.
- با JavaScript سازگاری طبیعی دارد.
XML نیز هنوز در برخی سیستمهای قدیمی، Enterprise و سرویسهای خاص استفاده میشود.
انتخاب بین آنها باید بر اساس نیاز پروژه و قرارداد API انجام شود.
# خطاهای رایج هنگام کار با JSON در PHP
۱. فراموش کردن json_encode
اگر یک Array PHP را مستقیماً به عنوان JSON ارسال کنید، ممکن است خروجی مورد انتظار را دریافت نکنید.
برای تولید JSON:
json_encode($data);
استفاده کنید.
۲. فراموش کردن json_decode
اگر Response یک API به صورت JSON باشد، برای پردازش آن باید ابتدا Decode شود.
۳. اشتباه گرفتن Object و Array
بدون true:
$data = json_decode($json);
معمولاً با Object کار میکنید.
با true:
$data = json_decode($json, true);
با Associative Array کار میکنید.
۴. بررسی نکردن خطای JSON
برای JSON نامعتبر باید Error Handling مناسب داشته باشید.
۵. فراموش کردن Content-Type
در APIها Header مناسب را ارسال کنید:
Content-Type: application/json
۶. اعتبارسنجی نکردن داده
JSON بودن داده به معنی معتبر یا امن بودن آن نیست.
# یک مثال کامل: ساخت API ساده با PHP
در مثال زیر یک Response ساده JSON ایجاد میکنیم:
<?php
header('Content-Type: application/json; charset=utf-8');
$response = [
'success' => true,
'message' => 'اطلاعات با موفقیت دریافت شد',
'data' => [
'id' => 1,
'name' => 'علی',
'skills' => [
'PHP',
'Laravel',
'MySQL'
]
]
];
echo json_encode(
$response,
JSON_UNESCAPED_UNICODE
);
پاسخ API:
{
"success": true,
"message": "اطلاعات با موفقیت دریافت شد",
"data": {
"id": 1,
"name": "علی",
"skills": [
"PHP",
"Laravel",
"MySQL"
]
}
}
# یک مثال کامل: دریافت JSON و پردازش آن
فرض کنید Client این JSON را ارسال میکند:
{
"name": "Ali",
"email": "ali@example.com"
}
PHP:
<?php
header('Content-Type: application/json; charset=utf-8');
$input = file_get_contents('php://input');
try {
$data = json_decode(
$input,
true,
512,
JSON_THROW_ON_ERROR
);
$name = $data['name'] ?? null;
$email = $data['email'] ?? null;
$response = [
'success' => true,
'data' => [
'name' => $name,
'email' => $email
]
];
echo json_encode(
$response,
JSON_UNESCAPED_UNICODE
);
} catch (JsonException $e) {
http_response_code(400);
echo json_encode([
'success' => false,
'message' => 'JSON نامعتبر است'
], JSON_UNESCAPED_UNICODE);
}
در یک پروژه واقعی باید Validation مربوط به name و email نیز اضافه شود.
# مهمترین توابع و امکانات JSON در PHP
| تابع یا Constant | کاربرد |
|---|---|
json_encode() | تبدیل داده PHP به JSON |
json_decode() | تبدیل JSON به داده PHP |
json_last_error() | بررسی آخرین خطای JSON |
json_last_error_msg() | دریافت پیام خطای JSON |
JSON_UNESCAPED_UNICODE | نمایش بهتر Unicode و فارسی |
JSON_UNESCAPED_SLASHES | جلوگیری از Escape شدن Slash |
JSON_PRETTY_PRINT | خواناتر کردن JSON |
JSON_THROW_ON_ERROR | تبدیل خطاهای JSON به Exception |
JsonException | مدیریت Exception مربوط به JSON |
# بهترین روش کار با JSON در PHP
اگر بخواهیم یک الگوی مناسب برای پروژههای واقعی داشته باشیم، میتوان این مراحل را در نظر گرفت:
دریافت Request
↓
بررسی Content-Type
↓
خواندن Body
↓
json_decode()
↓
Validation
↓
Business Logic
↓
Database / Service
↓
ساخت Response
↓
json_encode()
↓
ارسال JSON
این تفکیک باعث میشود کد Application قابل نگهداریتر و قابل توسعهتر باشد.
# جمعبندی
JSON یکی از پایههای اصلی ارتباط بین Applicationهای وب و APIها است و یادگیری آن برای هر برنامهنویس PHP ضروری است.
در این مقاله یاد گرفتیم:
- JSON چیست.
- چرا JSON در PHP اهمیت دارد.
- چگونه Array را به JSON تبدیل کنیم.
- چگونه JSON را به Array تبدیل کنیم.
- تفاوت Object و Associative Array در
json_decode()چیست. - چگونه JSON فارسی تولید کنیم.
- چگونه JSON را Pretty Print کنیم.
- چگونه خطاهای JSON را مدیریت کنیم.
- چگونه JSON را از Request دریافت کنیم.
- چگونه JSON را به API ارسال کنیم.
- چگونه Response یک API را Decode کنیم.
- چگونه JSON را در REST APIهای PHP استفاده کنیم.
- JSON چه ارتباطی با Laravel دارد.
اگر در حال یادگیری برنامهنویسی PHP هستید، بعد از یادگیری JSON بهتر است سراغ کار با فایل در PHP بروید. کار با فایل یکی دیگر از مهارتهای پایهای PHP است و در پروژههای واقعی برای ذخیره اطلاعات، پردازش فایلهای متنی، CSV، آپلود فایل و مدیریت فایلهای سرور کاربرد زیادی دارد.
# سوالات متداول درباره JSON در PHP
JSON در PHP چیست؟
JSON یک فرمت متنی برای انتقال و ذخیره داده است که در PHP میتوان آن را با توابعی مانند json_encode() و json_decode() پردازش کرد.
json_encode در PHP چه کاری انجام میدهد؟
json_encode() دادههایی مانند Array و Object را به JSON تبدیل میکند.
json_decode در PHP چه کاری انجام میدهد؟
json_decode() یک JSON String را به ساختارهای قابل استفاده در PHP مانند Object یا Associative Array تبدیل میکند.
چگونه JSON را به Array تبدیل کنیم؟
پارامتر دوم json_decode() را true قرار دهید:
$data = json_decode($json, true);
چگونه Array را به JSON تبدیل کنیم؟
از json_encode() استفاده کنید:
$json = json_encode($data);
چگونه JSON فارسی را در PHP درست نمایش دهیم؟
هنگام Encode کردن داده میتوان از:
JSON_UNESCAPED_UNICODE
استفاده کرد.
چگونه JSON نامعتبر را تشخیص دهیم؟
میتوانید از json_last_error() استفاده کنید یا در کدهای جدیدتر JSON_THROW_ON_ERROR را به کار ببرید.
چگونه JSON را در API PHP ارسال کنیم؟
داده را با json_encode() تبدیل کنید و Header زیر را ارسال کنید:
Content-Type: application/json
چگونه JSON ارسالشده در Request را در PHP دریافت کنیم؟
Body خام Request را میتوان با:
$input = file_get_contents('php://input');
خواند و سپس با json_decode() پردازش کرد.
آیا JSON برای ساخت REST API در PHP مناسب است؟
بله. JSON یکی از رایجترین فرمتهای تبادل داده در REST APIها است و PHP امکانات داخلی مناسبی برای Encode و Decode کردن آن دارد.
# مقالات مرتبط
برای تکمیل مسیر یادگیری PHP، مقالات مرتبط زیر را نیز مطالعه کنید:
- PHP چیست و چه کاربردی دارد؟
- آموزش PHP از صفر
- انواع داده در PHP
- آرایهها در PHP
- رشتهها در PHP
- کار با تاریخ و زمان در PHP
- کار با فایل در PHP
- Exception در PHP
- Namespace در PHP
- Composer چیست؟
- OOP در PHP
- PHP و MySQL
- REST API با PHP
- ساخت API با PHP





