آموزش JSON در PHP با مثال

JSON یک استاندارد متنی و سبک برای انتقال داده است. در این آموزش نحوه کار با JSON در PHP را بررسی می‌کنیم. ۲ تابع اصلی تبدیل آرایه به JSON و برعکس را به همراه توابع و روش‌های کاربردی یاد می‌گیریم.

در ابتدا مرور کوتاهی روی ساختار استاندارد JSON داریم. در بخش بعدی، نحوه تبدیل یک مقدار به JSON در PHP را یاد گرفته و چند مثال می‌زنیم. سپس نحوه تبدیل متن JSON به آرایه را با چند مثال بررسی می‌کنیم.

آموزش JSON در PHP

JSON یک فرمت انتقال پیام است که از زبان اسکریپت نویسی جاوا اسکریپت مشتق شده است. این کلمه مخفف JavaScript Object Notation است. البته استفاده از آن محدود به جاوا اسکریپت نبوده و امروزه از این ساختار به طور مستقل در برنامه‌های کامپیوتری استفاده می‌شود.

ساختار JSON پس از معرفی، توسط شرکت‌های بزرگ توسعه‌دهنده نرم‌افزار به رسمیت شناخته شد و امروزه اکثر زبان‌های برنامه‌نویسی جدید از آن پشتیبانی می‌کنند.

از این استاندارد برای انتقال داده ساخت‌یافته بین نرم‌افزارها استفاده می‌شود. این انتقال می‌تواند به طور مستقیم بر بستر شبکه بوده یا برای انتقال داده بین سرور و کلاینت استفاده شود.

یکی از پر کاربردترین استفاده‌های JSON استفاده از آن برای انتقال پیام‌های وب‌سرویس و API ها در برنامه‌هاست.

نمونه‌ای از ساختار JSON

در تصویر زیر یک نمونه از پیام JSON را می‌بینید. این استاندارد یک ساختار سلسله مراتبی و در صورت نیاز به شکل کلید مقدار (key-value) به ما می‌دهد.

نمونه ساختار کد JSON
نمونه ساختار کد JSON

برای استفاده از JSON در PHP نیاز به هیچ کتابخانه یا کد اضافه‌ای نیست. از نسخه 5.2 به بعد، توابع اصلی آن به طور پیش‌فرض در مفسر (مترجم) PHP قرار گرفته است.

تبدیل متغیر به JSON

برای تبدیل یک مقدار (یا متغیر) به JSON از تابع json_encode() در PHP استفاده می‌کنیم. این تابع یک ورودی اجباری و یک ورودی اختیاری داشته و نتیجه را به شکل boolean (0 و 1) برمی‌گرداند.

json_encode( $value, $options )

مقداری که به عنوان ورودی به این تابع می‌دهیم، می‌تواند هر چیزی به غیر منبع (resource) باشد. البته در اکثر موارد از آرایه PHP یا اشیاء (objectها) استفاده می‌شود.

اگر با نوع‌های داده‌ای آشنایی ندارید، پیشنهاد می‌کنم آموزش انواع داده متغیر در PHP را ببینید.

پارامتر دوم، متغیری برای اعمال تنظیمات خاص روی عملیات تبدیل متغیر به JSON استفاده می‌شود. چون بررسی جزئی آن خارج از بحث این آموزش است، اگر علاقه‌مندید با مراجعه به مستندات آن جزئیاتش را بررسی کنید. (بخش flags)

کار با json_encode

فرض کنید یک آرایه انجمنی (کلید مقدار) از نام دانشجویان و نمرات آن‌ها داریم. می‌خواهیم این آرایه را به JSON تبدیل کنیم.

<?php
    $scores = array('sara' => 17, 'ehsan' => 19, 'omid' => 18, 'nazanin' => 18);

    $json = json_encode( $scores );
    echo $json;
?>

وقتی دستور echo اجرا می‌شود، رشته متنی زیر را در خروجی داریم. این رشته متنی همان فرمت JSON آرایه نمرات است:

{"sara":17,"ehsan":19,"omid":18,"nazanin":18}

گفتیم می‌توانیم اشیاء را هم به JSON در PHP تبدیل کنیم. در قطعه کد زیر، یک کلاس به نام Person داریم. یک نمونه از آن ساخته و ویژگی‌های آن را تعریف می‌کنیم.

در انتها با تعریف متغیر شئ ($p) به عنوان پارامتر ورودی json_encode() آن را به JSON تبدیل می‌کنیم.

<?php
    Class Person {
        public $name = "";
        public $age = null;
        public $scores = array();
    }

    $p = new Person();
    $p->name  = "Nazanin";
    $p->age   = 22;
    $p->scores= array(17,19,15.5,18,20);

    echo json_encode( $p );
?>

نتیجه نهایی اجرای این قطعه کد، کد JSON زیر خواهد شد:

{"name":"Nazanin","age":22,"scores":[17,19,15.5,18,20]}

اگر با کلاس‌ها آشنایی ندارید، پیشنهاد می‌کنم آموزش اصول برنامه نویسی شی گرا را دیده و سپس آموزش زیر را دنبال کنید:

آموزش کلاس در PHP و کار با متد و ویژگی

آموزش کلاس در PHP و کار با متد و ویژگی

تبدیل JSON به متغیر PHP

با استفاده از تابع json_decode() در PHP یک رشته متنی JSON را به متغیر تبدیل می‌کنیم. خروجی این تابع، یک شئ یا یک آرایه است.

json_decode( $json, $assoc, $depth, $options )

اولین پارامتر ورودی تابع json_decode اجباری و بقیه اختیاری هستند:

  • پارامتر اول یک رشته متنی PHP است که همان پیام JSON است. این رشته باید با یونیکد UTF-8 کدگذاری شده باشد.
  • پارامتر دوم ($assoc) به طور پیش‌فرض false است. اگر آن را true کنیم، مقدار بازگشتی به شکل آرایه انجمنی PHP (آرایه‌های کلید-مقدار) خواهد بود.
  • پارامتر $depth عمق بازگشت در پیام JSON را مشخص می‌کند. به این معنی که در سلسله مراتب پیام JSON تا چه عمقی پیشروی کند. مقدار پیش‌فرض آن 512 است.
  • پارامتر $options نیز یک bitmask به شکل عدد صحیح است که تنظیمات خاصی را برای نوع فرمت JSON ورودی مشخص می‌کند.

معمولاً پارامتر اول را تنظیم کرده و اگر نیاز داشتیم خروجی به صورت آرایه‌ای باشد، پارامتر دوم را true تعریف می‌کنیم.

کار با json_decode

خروجی اولین کد (نمرات دانشجویان) را در نظر بگیرید. این رشته JSON در PHP را به دو روش تبدیل می‌کنیم.

<?php
    $json = '{"sara":17,"ehsan":19,"omid":18,"nazanin":18}';
	
    $scores = json_decode( $json );
    var_dump($scores);
?>

اولین تبدیل که فقط با تعیین یک پارامتر انجام شده، نتیجه‌ای مشابه زیر دارد. می‌بینید که خروجی ما یک شئ است. یعنی برای دسترسی به نمره امید باید $scores->omid را فراخوانی کنیم.

object(stdClass)#1 (4) {
  ["sara"]    => int(17)
  ["ehsan"]   => int(19)
  ["omid"]    => int(18)
  ["nazanin"] => int(18)
}

در تبدیل دوم، پارامتر دوم را true تعریف می‌کنم؛ بنابراین انتظار دارم خروجی یک آرایه انجمنی باشد.

<?php
    $json = '{"sara":17,"ehsan":19,"omid":18,"nazanin":18}';

    $scores = json_decode( $json, true );
    var_dump($scores);
?>

خروجی را در تصویر زیر می‌بینید. در اینجا اگر بخواهم نمره نازنین را بگیرم باید از $scores['nazanin'] استفاده کنم.

خروجی دیکد آرایه‌ای JSON در PHP
خروجی دیکد آرایه‌ای JSON در PHP

توابع تکمیلی JSON در PHP

دو تابع دیگر داریم که بسیار کمتر از دو تابع اصلی استفاده می‌شود. اگر اجرای هر کدام از دو تابع بالا دچار خطایی شود، با استفاده از این توابع می‌توانیم خطای رخ داده را شناسایی کرده و تصمیم مناسب بگیریم.

می‌توانیم از این ۲ تابع برای مدیریت خطا در PHP استفاده کنیم.

در جدول زیر، جمع‌بندی توابع کار با JSON در PHP آورده شده است:

تابععملیات
json_encode()تبدیل متغیر ورودی به JSON
json_decode()تبدیل رشته JSON به متغیر PHP
json_last_error()کد آخرین خطای اتفاق افتاده
json_last_error_msg()متن پیام آخرین خطا

امیدوارم از این آموزش کاربردی استفاده کرده باشید. اگر سوال یا پیشنهادی دارید، از بخش دیدگاه‌ها مطرح کنید. 🙂