JSON یک استاندارد متنی و سبک برای انتقال داده است. در این آموزش نحوه کار با JSON در PHP را بررسی میکنیم. ۲ تابع اصلی تبدیل آرایه به JSON و برعکس را به همراه توابع و روشهای کاربردی یاد میگیریم.
در ابتدا مرور کوتاهی روی ساختار استاندارد JSON داریم. در بخش بعدی، نحوه تبدیل یک مقدار به JSON در PHP را یاد گرفته و چند مثال میزنیم. سپس نحوه تبدیل متن JSON به آرایه را با چند مثال بررسی میکنیم.
فهرست محتوای آموزش
آموزش JSON در PHP
JSON یک فرمت انتقال پیام است که از زبان اسکریپت نویسی جاوا اسکریپت مشتق شده است. این کلمه مخفف JavaScript Object Notation است. البته استفاده از آن محدود به جاوا اسکریپت نبوده و امروزه از این ساختار به طور مستقل در برنامههای کامپیوتری استفاده میشود.
ساختار JSON پس از معرفی، توسط شرکتهای بزرگ توسعهدهنده نرمافزار به رسمیت شناخته شد و امروزه اکثر زبانهای برنامهنویسی جدید از آن پشتیبانی میکنند.
از این استاندارد برای انتقال داده ساختیافته بین نرمافزارها استفاده میشود. این انتقال میتواند به طور مستقیم بر بستر شبکه بوده یا برای انتقال داده بین سرور و کلاینت استفاده شود.
یکی از پر کاربردترین استفادههای JSON استفاده از آن برای انتقال پیامهای وبسرویس و API ها در برنامههاست.
نمونهای از ساختار JSON
در تصویر زیر یک نمونه از پیام JSON را میبینید. این استاندارد یک ساختار سلسله مراتبی و در صورت نیاز به شکل کلید مقدار (key-value) به ما میدهد.
برای استفاده از 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]}
اگر با کلاسها آشنایی ندارید، پیشنهاد میکنم آموزش اصول برنامه نویسی شی گرا را دیده و سپس آموزش زیر را دنبال کنید:
تبدیل 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
دو تابع دیگر داریم که بسیار کمتر از دو تابع اصلی استفاده میشود. اگر اجرای هر کدام از دو تابع بالا دچار خطایی شود، با استفاده از این توابع میتوانیم خطای رخ داده را شناسایی کرده و تصمیم مناسب بگیریم.
میتوانیم از این ۲ تابع برای مدیریت خطا در PHP استفاده کنیم.
در جدول زیر، جمعبندی توابع کار با JSON در PHP آورده شده است:
تابع | عملیات |
---|---|
json_encode() | تبدیل متغیر ورودی به JSON |
json_decode() | تبدیل رشته JSON به متغیر PHP |
json_last_error() | کد آخرین خطای اتفاق افتاده |
json_last_error_msg() | متن پیام آخرین خطا |
امیدوارم از این آموزش کاربردی استفاده کرده باشید. اگر سوال یا پیشنهادی دارید، از بخش دیدگاهها مطرح کنید. 🙂
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
لطفا api نویسی با php را هم توضیح بدید.
ممنون.
ممنون بابت پیشنهادتون
حتماً، یه آموزش و احتمالاً یه مینی دوره پروژهمحور براش منتشر میکنیم.