• توضیحات json جاوا اسکریپت - JSON و روش های کار با آن. یک مثال ساده از داده های JSON

    JSON یک فرمت متنی برای نوشتن داده است.این به شما امکان می دهد هم یک عدد واحد یا یک رشته و هم ساختارهای پیچیده را به صورت متن ارائه دهید، به عنوان مثال، آرایه هایی با داده ها. استفاده از این فرمت ضبط راحت است زیرا خوانا و شهودی است و در عین حال به شما امکان می دهد ساختارهای داده بسیار پیچیده را ذخیره کنید. همچنین فشرده تر از xml است، بنابراین به نظر من برای تبادل داده بین مرورگر وب و سرور ارجح تر است.

    دستور JSON با مثال

    فرمت json معمولاً در 2 نسخه نوشته می شود:

    1. توالی مقادیر. به عنوان مثال، دنباله 10، 15 و "test" در فرمت JSON به شکل زیر است:

    2. ضبط به صورت جفت ارزش کلیدی . مثلا:

    ("نام": "ایوانف سرگئی"، "تاریخ تولد": "03/09/1975")

    مثال کمی پیچیده تر:

    ( "نام" : "ایوانف سرگئی"، "آدرس" : ( "شهر" : "مسکو"، "خیابان": "پیاتنیتسکایا"، "خانه" : "35" ) )

    توابع PHP برای کار با فرمت JSON

    به زبان php از نسخه 5.2. فقط 4 عملکرد وجود دارد:

    • json_decode- یک رشته JSON را رمزگشایی می کند (داده ها را از یک رشته فرمت json دریافت می کند)
    • json_encode- یک نمایش JSON از داده ها را برمی گرداند (داده ها را به یک رشته json تبدیل می کند)
    • json_last_error_msg- رشته ای را با پیام خطای آخرین تماس به json_encode() یا json_decode() برمی گرداند.
    • json_last_error- آخرین خطا را برمی گرداند

    اساساً در بیشتر موارد فقط از دو تابع استفاده می شود: json_encodeو json_decode. من به جزئیات نحو آنها نمی پردازم، برای جزئیات بیشتر می توانید به php.net مراجعه کنید. مثال استفاده:

    $arr1 = آرایه (0,1,2); $json_str = json_encode ($arr1); echo $json_str; // خروجی رشته json: $arr2 = json_decode($json_str); echo $arr2; // خروجی: 1

    توجه داشته باشید : در رمزگذاری در فرمت داده JSON به زبان روسی، تابع json_encode کاراکترهای روسی را به یونیکد، یعنی آنها را جایگزین می کند \uXXXXو بنابراین، رشته json قابل خواندن برای انسان نیست (اما برای مرورگر قابل درک است). اگر نمی‌خواهید به یونیکد تبدیل کنید (مثلاً هنگام اشکال‌زدایی کد)، می‌توانید به سادگی از گزینه JSON_UNESCAPED_UNICODE استفاده کنید.

    همچنین می‌توانید از JSON_UNESCAPED_SLASHES و JSON_NUMERIC_CHECK استفاده کنید تا از اضافه کردن اسلش برای فرار در حین رمزگذاری و رمزگذاری رشته‌هایی با اعداد به عنوان اعداد اجتناب کنید. در نتیجه، برای اینکه رشته json برای انسان قابل خواندن باشد، به عنوان مثال، این کار را انجام می دهیم:

    $arr = array("fio" => "ایوانف سرگئی"، "سن" => "32"، "vk_url" => "https://vk.com/id11111"); echo json_encode($arr، JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);

    بدون این گزینه ها، خط به این صورت خواهد بود:

    ( "fio" : "\u0418\u0432\u0430\u043d\u043e\u0432 \u0421\u0435\u0440\u0433\u0435\u0439"، "سن": "32"، "http:"vk_url" /vk.com\/id11111")

    و با استفاده از گزینه ها، یک رشته قابل خواندن دریافت می کنیم:

    ("fio" : "ایوانف سرگئی"، "سن": 32، "vk_url": "https://vk.com/id11111" )

    یک چیز دیگر: اگر نیاز به رمزگشایی رشته json دارید، تابع json_decode دقیقاً یک آرایه را برگرداند، فقط یک پارامتر دوم به تابع برابر با true اضافه کنید.

    $json_str = "( "a":1، "b":2، "c":3 )"; $obj = json_decode ($json_str)؛ // get object echo $obj->a; // خروجی 1 $arr = json_decode ($json_str، true); // دریافت یک آرایه انجمنی echo $arr["a"]; // چاپ 1

    این پایان بررسی توابع php است.

    توابع جاوا اسکریپت برای کار با فرمت JSON

    بیایید با این واقعیت شروع کنیم که فرمت JSON در ابتدا برای زبان جاوا اسکریپت اختراع شد و سپس به یک قالب متن جداگانه تبدیل شد که در زبان های مختلف استفاده می شود. بنابراین، ظاهراً نحو JSON بسیار شبیه به سینتکس برای نوشتن اشیاء و آرایه‌های معمولی است.

    // مثال آرایه جاوا اسکریپت arr = ; هشدار(arr); // نمایش 1 // نمونه ای از یک شی در جاوا اسکریپت obj = ( "name": "Vasya", "age": 35, "isAdmin": false ) alert(obj.name); // "Vasya" را نمایش می دهد

    توابع جاوا اسکریپت مورد استفاده برای تبدیل و تبدیل به فرمت JSON:

    • JSON.parse- رمزگشایی رشته JSON (تبدیل رشته به اشیا و/یا آرایه ها)
    • JSON.stringify- یک نمایش JSON از داده ها را برمی گرداند (تبدیل اشیا و/یا آرایه ها به رشته json)

    یک مثال ساده از رمزگشایی یک رشته json به یک آرایه با اعداد:

    Str = ""; arr = json parse(str); هشدار(arr); // چاپ 1

    مثالی از تبدیل (سریال کردن) یک شی به یک رشته JSON:

    Obj = ( "name": "Vasya"، "age": 35، "isAdmin": false ) alert(JSON.stringify(obj)); // نمایش داده می شود ("name":"Vasya", "age":35,"isAdmin":false)

    هنگام سریال سازی (تبدیل) یک شی به یک رشته JSON، متد فراخوانی می شود به JSONاین شی، اگر وجود داشته باشد. اگر روشی وجود نداشته باشد، تمام خصوصیات شی فهرست شده است. مثالی از تبدیل یک شی با متد toJSON:

    Obj = ( "name": "Vasya"، "age": 35، "isAdmin": false، toJSON: function() ( return this.age; ) ) alert(JSON.stringify(obj)); // چاپ 35

    نمونه هایی از استفاده عملی از فرمت JSON

    در واقع، من شخصاً از فرمت JSON در 2 موقعیت اصلی استفاده می کنم:

    1. انتقال داده بین مرورگر و سرور با استفاده از درخواست های Ajax.

    برای مثال، صفحه‌ای داریم که باید داده‌ها را بدون بارگیری مجدد صفحه به‌روزرسانی کنیم. فرض کنید به اطلاعاتی با لیستی از کارمندان و داده های آنها نیاز دارید تا از سرور "بارگذاری" شود.

    در جاوا اسکریپت با استفاده از jQuery آن را ساده کرده و داده ها را به صورت جدول در مرورگر نمایش می دهیم:

    $.getJSON("get-info.php").success(function(data) ( // درخواست ajax، داده ها از سرور در متغیر داده htmlstr = "

    "; برای (var i=0; i "; // ستون اول - نام کامل htmlstr += " "; // ستون دوم - تاریخ تولد htmlstr += "";) htmlstr = "
    " + data[i].birthday + "
    "; $("div.info").html(htmlstr); // نمایش جدول به دست آمده با داده ها در یک div با کلاس اطلاعات ));

    در سرور، اسکریپت get-info.php که یک درخواست ajax به آن داده می شود، می تواند به عنوان مثال به صورت زیر باشد:

    $user_info = array(); // ایجاد یک آرایه با داده $user_info = آرایه ("fio" => "Ivanov Sergey", "birthday" => "03/09/1975"); $user_info = آرایه ("fio" => "Petrov Alexey", "birthday" => "18.09.1983"); echo json_encode ($user_info); خروج؛

    در این مثال، رشته JSON که از سرور به مرورگر منتقل می‌شود عبارت بود از:

    [("fio":"ایوانف سرگئی"،"تولد":"03/09/1975")،("fio":"پتروف الکسی"،"تولد":"09/18/1983")]

    من عمداً خط را به شکل "درخت" نشان ندادم، زیرا به این شکل منتقل می شود. و چگونه می توانید قدردانی کنید نوشتن داده ها در قالب JSON بسیار فشرده استیعنی انتقال این داده ها از سرور به مرورگر تقریباً آنی خواهد بود.

    2. نوشتن ساختارهای داده پیچیده در پایگاه داده.

    گاهی اوقات شرایطی وجود دارد که توصیه نمی شود جدول دیگری را در پایگاه داده به منظور ذخیره داده های مختلف راه اندازی کنید. فرض کنید، فرض کنید کاربری که در سایت ثبت نام کرده است، این امکان را دارد که تنظیمات رنگ پس زمینه و رنگ متن را انجام دهد.

    به جای شروع یک جدول دیگر به خاطر 2 تنظیمات، می توانید به سادگی یک ستون متنی در جدول با لیست کاربران ایجاد کنید تا داده های تنظیمات کاربر را در آن قرار دهید. سپس درخواست به روز رسانی تنظیمات، به عنوان مثال، می تواند مانند این باشد:

    UPDATE users SET settings = "("background-color":"#FFFFFF", "text-color":"#000000")" WHERE user_id = 10

    در آینده، با دریافت از جدول کاربراناطلاعات، یک اسکریپت php می تواند به راحتی آنها را به یک آرایه با تنظیمات تبدیل کند. به عنوان مثال، اگر متغیر $user_info حاوی داده‌های بازیابی شده برای کاربر از جدول کاربران باشد، دریافت آرایه با تنظیمات بسیار ساده است:

    $settings = json_decode($user_info["settings"]، true); echo "Background color = ".$settings["background-color"]; echo "Text color = ".$settings["text-color"];

    در قالب JSON، می‌توانید برای مثال، به پایگاه داده بنویسید که خریدار کدام گزینه محصول را انتخاب کرده است.

    ("15":["45","47"], "18":"52") // گزینه 15 روی 45 و 47 و گزینه 18 روی 52 تنظیم شده است.

    در اصل، حتی می توانید کل محتویات سبد را با فرمت JSON بنویسید، به عنوان مثال به این صورت:

    ( "user_id" : 10, "session_id" : "2c2l3h4ii271aojentejtdcmh3", "products": [ ( "product_id" : 15, "options" : ( "15" : , "18" : 52 ), "تعداد" : 1 "price" : 1500 ), ( "product_id" : 16، "options" : ( "15" : , "18" : 51 )، "تعداد" : 2، "price" : 1000 ) ] )

    در یک نمای غیر درختی معمولی، این رشته JSON به شکل زیر است:

    ("user_id":10,"session_id":"2c2l3h4ii271aojentejtdcmh3"،"products":[("product_id":15,"options":("15":"18":52)، "تعداد":1, "price":1500)،("product_id":16,"options":("15":"18":51)،"تعداد":2"قیمت":1000)])

    بنابراین، همانطور که از مثال ها می بینید، تقریباً هر اطلاعاتی را می توان در قالب JSON ذخیره و منتقل کرد.

    حتما تا به حال نام JSON را شنیده اید. چیست؟ چه کاری می تواند انجام دهد و چگونه می توان از آن استفاده کرد؟

    در این درس به اصول اولیه JSON می پردازیم و به نکات زیر می پردازیم:

    • JSON چیست؟
    • JSON برای چه مواردی استفاده می شود؟
    • چگونه یک رشته JSON ایجاد کنیم؟
    • یک مثال ساده از رشته JSON.
    • بیایید JSON و XML را با هم مقایسه کنیم.
    • چگونه با JSON در جاوا اسکریپت و PHP کار کنیم؟

    JSON چیست؟

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

    هنگامی که یک رشته JSON ایجاد شد، ارسال آن به برنامه دیگری یا به مکان دیگری در شبکه آسان است زیرا متن ساده است.

    JSON دارای مزایای زیر است:

    • جمع و جور است.
    • خواندن و نوشتن جملات آن توسط انسان و رایانه آسان است.
    • به راحتی می توان آن را به یک ساختار داده برای اکثر زبان های برنامه نویسی (اعداد، رشته ها، بولی ها، آرایه ها و غیره) تبدیل کرد.
    • بسیاری از زبان های برنامه نویسی دارای توابع و کتابخانه هایی برای خواندن و ایجاد ساختارهای JSON هستند.

    نام JSON مخفف عبارت JavaScript Object Notation (نماینده اشیاء جاوا اسکریپت) است. همانطور که از نام نشان می دهد، بر اساس نحوه تعریف اشیا (بسیار شبیه به ایجاد آرایه های انجمنی در زبان های دیگر) و آرایه ها است.

    JSON برای چه مواردی استفاده می شود؟

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

    1. کاربر روی تصویر کوچک محصول در یک فروشگاه آنلاین کلیک می کند.
    2. جاوا اسکریپت در حال اجرا بر روی مرورگر یک درخواست AJAX به اسکریپت PHP در حال اجرا بر روی سرور ارسال می کند و شناسه محصول انتخاب شده را ارسال می کند.
    3. اسکریپت PHP نام محصول، توضیحات، قیمت و سایر اطلاعات را از پایگاه داده دریافت می کند. سپس یک رشته JSON از داده ها می سازد و آن را به مرورگر می فرستد.
    4. جاوا اسکریپت در حال اجرا در مرورگر رشته JSON را دریافت می کند، آن را رمزگشایی می کند و اطلاعات محصول را در صفحه برای کاربر نمایش می دهد.

    همچنین می توانید از JSON برای ارسال داده ها از مرورگر به سرور با ارسال رشته JSON به عنوان پارامتر در درخواست های GET یا POST استفاده کنید. اما این روش کمتر رایج است، زیرا انتقال داده ها از طریق درخواست های AJAX می تواند ساده شود. برای مثال، شناسه محصول ممکن است به عنوان بخشی از درخواست GET در URL گنجانده شود.

    کتابخانه jQuery چندین روش دارد، مانند getJSON() و parseJSON() که بازیابی داده ها را با استفاده از JSON از طریق درخواست های AJAX آسان می کند.

    چگونه یک رشته JSON ایجاد کنیم؟

    چند قانون اساسی برای ایجاد یک رشته JSON وجود دارد:

    • رشته JSON شامل یک آرایه از مقادیر یا یک شی (آرایه انجمنی از جفت نام/مقدار) است.
    • آرایهدر براکت های مربع ([و]) محصور شده و حاوی لیستی از مقادیر جدا شده با کاما است.
    • یک شیدر پرانتزهای فرفری (( و )) محصور شده و حاوی لیستی از جفت نام/مقدار جدا شده با کاما است.
    • جفت نام/مقدارشامل نام فیلد است که در گیومه های دوتایی محصور شده است، به دنبال آن یک کولون (:) و مقدار فیلد.
    • معنیدر یک آرایه یا شی می تواند:
      • عدد (اعداد صحیح یا ممیز شناور)
      • رشته (در دو گیومه)
      • مقدار بولی (درست یا نادرست)
      • آرایه دیگر (محصور در پرانتز مربع)
      • شی دیگری (محصور در پرانتزهای مجعد)
      • مقدار صفر

    برای گنجاندن دو نقل قول در یک رشته، باید از بک اسلش استفاده کنید: \" . درست مانند بسیاری از زبان های برنامه نویسی، می توانید کاراکترهای کنترل و کدهای هگز را در یک رشته قرار دهید.

    مثال ساده JSON String

    نمونه زیر نمونه ای از پرداخت با فرمت JSON است:

    ( "orderID": 12345، "shopperName": "Vanya Ivanov"، "shopperEmail": " [ایمیل محافظت شده]"، "محتوا": [ ( "productID": 34، "productName": "Super product"، "quantity": 1 ), ( "productID": 56, "productName": "Miracle product"، "quantity": 3 ) ]، "orderCompleted": true)

    بیایید با جزئیات به خط نگاه کنیم:

    • با استفاده از بریس های فرفری (( و )) یک شی ایجاد می کنیم.
    • چندین جفت نام/مقدار در شی وجود دارد: "orderID": 12345 ویژگی با نام "orderId" و مقدار صحیح 12345 "shopperName": ویژگی "Vanya Ivanov" با نام "shopperName" و مقدار رشته "Vanya Ivanov" "shopperEmail" :" [ایمیل محافظت شده]" خاصیت با نام "shopperEmail" با مقدار رشته " [ایمیل محافظت شده]" "contents": [... ] ویژگی با نام "contents" که مقدار آن آرایه "orderCompleted" است: true ویژگی با نام "orderCompleted" با مقدار بولی true
    • 2 شی در آرایه "محتوا" وجود دارد که نشان دهنده موارد خط در ترتیب است. هر شی شامل 3 ویژگی است: productID، productName، و مقدار.

    به هر حال، از آنجایی که JSON مبتنی بر اعلان اشیاء جاوا اسکریپت است، می توانید به سرعت و به راحتی رشته JSON فوق را به یک شی جاوا اسکریپت تبدیل کنید:

    مقایسه JSON و XML

    از بسیاری جهات، می توانید JSON را به عنوان جایگزینی برای XML، حداقل در حوزه برنامه های کاربردی وب در نظر بگیرید. مفهوم AJAX در ابتدا مبتنی بر استفاده از XML برای انتقال داده بین سرور و مرورگر بود. اما در سال های اخیر، JSON برای انتقال داده های AJAX بیشتر و بیشتر محبوب شده است.

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

    در اینجا مثال شی XML بالا به نظر می رسد:

    orderID 12345 shopperName Ваня Иванов shopperEmail [email protected] contents productID 34 productName Супер товар quantity 1 productID 56 productName Чудо товар quantity 3 سفارش تکمیل شد درست است، واقعی

    نسخه XML به طور قابل توجهی بزرگتر است. در واقع 1128 کاراکتر طول دارد، در حالی که نوع JSON تنها 323 کاراکتر است. درک نسخه XML نیز سخت است.

    البته این یک مثال رادیکال است. و امکان ایجاد یک ورودی XML فشرده تر وجود دارد. اما حتی به طور قابل توجهی طولانی تر از معادل JSON خواهد بود.

    کار با رشته JSON در جاوا اسکریپت

    JSON فرمت ساده ای دارد، اما ایجاد یک رشته JSON به صورت دستی بسیار خسته کننده است. علاوه بر این، شما اغلب نیاز دارید که یک رشته JSON بگیرید، محتوای آن را به متغیری تبدیل کنید که می تواند در کد استفاده شود.

    اکثر زبان های برنامه نویسی دارای ابزارهایی برای تبدیل آسان متغیرها به رشته های JSON و بالعکس هستند.

    یک رشته JSON از یک متغیر ایجاد کنید

    جاوا اسکریپت دارای یک متد JSON.stringify() داخلی است که یک متغیر را می گیرد و یک رشته JSON نشان دهنده محتوای آن را برمی گرداند. به عنوان مثال، بیایید یک شی جاوا اسکریپت ایجاد کنیم که حاوی جزئیات سفارش از مثال ما باشد، و سپس یک رشته JSON از آن ایجاد کنیم:

    این کد خواهد داد:

    توجه داشته باشید که متد ()JSON.stringify یک رشته JSON را بدون فاصله برمی گرداند. خواندن آن سخت تر است، اما برای انتقال از طریق شبکه فشرده تر است.

    راه های مختلفی برای تجزیه رشته JSON در جاوا اسکریپت وجود دارد، اما مطمئن ترین و مطمئن ترین آن استفاده از متد داخلی JSON.parse() است. یک رشته JSON می گیرد و یک شی یا آرایه جاوا اسکریپت را که حاوی داده است برمی گرداند. مثلا:

    ما یک متغیر jsonString ایجاد کرده ایم که شامل رشته JSON نمونه سفارش ما است. سپس این رشته را به متد JSON.parse() می‌دهیم که یک شی حاوی داده‌های JSON ایجاد می‌کند و آن را در متغیر سبد خرید ذخیره می‌کند. تنها کاری که باید انجام دهید این است که با چاپ ویژگی های شی shopperEmail و productName آرایه محتوا، آزمایش کنید.

    در نتیجه خروجی زیر را دریافت خواهیم کرد:

    در یک برنامه واقعی، کد جاوا اسکریپت شما سفارش را به عنوان یک رشته JSON در یک پاسخ AJAX از اسکریپت سرور دریافت می کند، رشته را به متد JSON.parse() منتقل می کند و سپس از داده ها برای نمایش آن در صفحه کاربر استفاده می کند.

    JSON.stringify() و JSON.parse() قابلیت های دیگری مانند استفاده از توابع برگشت به تماس برای تبدیل سفارشی داده های خاص دارند. این گزینه ها برای تبدیل داده های مختلف به اشیاء معتبر جاوا اسکریپت بسیار مفید هستند.

    کار با رشته JSON در PHP

    PHP مانند جاوا اسکریپت دارای توابع داخلی برای کار با رشته های JSON است.

    یک رشته JSON از یک متغیر PHP ایجاد کنید

    تابع json_encode() یک متغیر PHP می گیرد و یک رشته JSON نشان دهنده محتویات متغیر را برمی گرداند. در اینجا نمونه سفارش ما نوشته شده در PHP است:

    12345, "shopperName" => "وانیا ایوانف"، "shopperEmail" => " [ایمیل محافظت شده]", "contents" => array(array("productID" => 34, "productName" => "Super Product", "quantity" => 1), array("productID" => 56, "productName" => "محصول معجزه"، "تعداد" => 3))، "orderCompleted" => true)؛ echo json_encode($cart)؛ ?>

    این کد دقیقاً همان رشته JSON را که در مثال جاوا اسکریپت است برمی گرداند:

    ("orderID":12345,"shopperName":"وانیا ایوانوف"،"shopperEmail":" [ایمیل محافظت شده]""contents":[("productID":34,"productName":"Super Product"،"quantity":1)،("productID":56,"productName":"محصول شگفت انگیز"، "مقدار": 3)]"orderCompleted":true)

    در یک برنامه واقعی، اسکریپت PHP شما این رشته JSON را به عنوان بخشی از پاسخ AJAX به مرورگر می فرستد، جایی که کد جاوا اسکریپت با استفاده از متد JSON.parse() آن را به یک متغیر تجزیه می کند تا در صفحه کاربر نمایش داده شود. .

    می توانید پرچم های مختلفی را به عنوان آرگومان دوم به تابع json_encode() ارسال کنید. با کمک آنها می توانید اصول رمزگذاری محتویات متغیرها را به یک رشته JSON تغییر دهید.

    یک متغیر از یک رشته JSON ایجاد کنید

    متد json_decode() برای تبدیل رشته JSON به متغیر PHP استفاده می شود. بیایید مثال جاوا اسکریپت خود را با متد JSON.parse() با کد PHP جایگزین کنیم:

    shopperEmail. "
    "; echo $cart->contents->productName."
    "; ?>

    در مورد جاوا اسکریپت، این کد تولید می کند:

    [ایمیل محافظت شده]کالاهای معجزه آسا

    به طور پیش فرض، تابع json_decode() اشیاء JSON را به عنوان اشیاء PHP برمی گرداند. اشیاء عمومی PHP از کلاس stdClass وجود دارد. به همین دلیل است که از -> برای دسترسی به ویژگی های شی در مثال بالا استفاده می کنیم.

    اگر به یک شی JSON در قالب یک آرایه PHP مرتبط نیاز دارید، باید true را به عنوان آرگومان دوم به تابع ()json_decode ارسال کنید. مثلا:

    $cart = json_decode ($jsonString، true); echo $cart["shopperEmail"] . "
    "; echo $cart["contents"]["productName"] . "
    ";

    این کد همان خروجی را تولید می کند:

    [ایمیل محافظت شده]کالاهای معجزه آسا

    همچنین می‌توانید آرگومان‌های دیگری را به تابع json_decode() ارسال کنید تا عمق بازگشت و نحوه مدیریت اعداد صحیح بزرگ را مشخص کنید.

    نتیجه

    در حالی که درک و استفاده از JSON آسان است، اما ابزاری بسیار مفید و منعطف برای انتقال داده ها بین برنامه ها و رایانه ها است، به خصوص در هنگام استفاده از AJAX. اگر قصد توسعه اپلیکیشن AJAX را دارید، بدون شک JSON مهمترین ابزار کارگاه شما خواهد بود.

    JSON(JavaScript Object Notation) یک فرمت تبادل داده ساده است که خواندن و نوشتن آن هم توسط انسان و هم توسط رایانه آسان است. این بر اساس زیر مجموعه ای از زبان برنامه نویسی جاوا اسکریپت است که در استاندارد ECMA-262 3rd Edition - دسامبر 1999 تعریف شده است. JSON یک قالب متنی است که کاملاً مستقل از زبان پیاده‌سازی است، اما از قراردادهایی استفاده می‌کند که برای برنامه‌نویسان زبان‌های مشابه C مانند C، C++، C#، Java، JavaScript، Perl، Python و بسیاری دیگر آشنا هستند. این ویژگی ها JSON را به یک زبان تبادل داده ایده آل تبدیل می کند.

    JSON بر اساس دو ساختار داده است:

    • مجموعه ای از جفت های کلید/مقدار. در زبان های مختلف این مفهوم به صورت پیاده سازی شده است یک شی، رکورد، ساختار، فرهنگ لغت، هش، فهرست نامگذاری شده یا آرایه انجمنی.
    • لیستی از مقادیر مرتب شده در اکثر زبان ها این به صورت پیاده سازی می شود آرایه، بردار، فهرست یا دنباله.

    اینها ساختارهای داده عمومی هستند. تقریباً تمام زبان های برنامه نویسی مدرن به شکلی از آنها پشتیبانی می کنند. منطقی است که فرض کنیم فرمت داده، مستقل از زبان برنامه نویسی، باید بر اساس این ساختارها باشد.

    در نماد JSON، به این صورت است:

    یک شیمجموعه ای نامرتب از جفت های کلید/مقدار است. یک شیء با یک (بند باز کردن فرفری و پایان با یک مهاربند فرفری بسته) شروع می شود. به دنبال هر نام آمده است: یک دونقطه، جفت های کلید/مقدار از هم جدا شده اند، یک کاما.

    آرایه- مجموعه ای از ارزش ها. یک آرایه با یک [پرانتز بازکننده شروع می‌شود و با یک براکت مربع بسته می‌شود. مقادیر با کاما از هم جدا می شوند.


    معنیشاید رشتهدر دو نقل قول، عدد, درست , نادرست , پوچ , هدف - شییا آرایه. این ساختارها می توانند تو در تو باشند.


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


    عددبه همان شکلی که در C یا جاوا نمایش داده می شود، با این تفاوت که فقط از سیستم اعداد اعشاری استفاده می شود.


    می توان از فاصله بین هر توکن استفاده کرد.

    به جز برخی از جزئیات کدگذاری، موارد فوق زبان را به طور کامل توصیف می کند.


    متغیرها، آرایه ها و اشیا شکل آشنا و مناسبی از نمایش داده ها هستند. مرسوم است که داده ها را به زبان مرورگر جاوا اسکریپت توصیف کنید، که در زبان سرور PHP ضروری نیست. فرمت JSON به شما امکان می دهد آنها را به یک کل تعمیم دهید و روی زبان برنامه نویسی تمرکز نکنید. در این مورد، داده ها به جفت تبدیل می شوند: "نام = مقدار". مقدار در هر یک از آنها نیز می تواند مجموعه ای از این جفت ها باشد.

    مرسوم است که JSON را با پرانتزهای مجعد مرتبط کنیم، و دومی کاملاً موجه است، زیرا فرمت جاوا اسکریپت JSON = Object Notation است. در سال های اخیر به خصوص پویا تغییرات زیادی کرده است. آنچه برای یک هدف خاص ایجاد شده است اغلب نتایج غیرمنتظره ای به همراه می آورد یا افق های جدیدی را باز می کند.

    تبادل اطلاعات: مرورگر - سرور

    فناوری AJAX سنتی شده است، به‌روزرسانی معمول صفحه به طور کاملمحبوبیت خود را متوقف کرد بازدید کننده، با باز کردن سایت، یک سری تبادل اطلاعات جزئی را آغاز می کند، زمانی که صفحات خاصی فقط در مکان مربوطه تغییر می کنند.

    اعتقاد بر این است که ظاهر JSON با استفاده از AJAX مرتبط است، اما در واقع، تداعی و نماد شی آن (ویژگی های نحو برای توصیف و استفاده از اشیا) بسیار بیشتر از تبادل داده بین مرورگر و سرور

    از آنجایی که محتوای صفحات سایت های مدرن واقعاً "انبوه" (حجمی) شده است ، کارایی قالب برای تبادل داده از اهمیت ویژه ای برخوردار شده است. این بدان معنا نیست که JSON به نمایش جدیدی از داده ها تبدیل شده است، اما این واقعیت که مدت هاست یک عنصر نحوی جاوا اسکریپت بوده است بسیار مهم است.

    استفاده از سیریلیک در نامگذاری متغیرها یک پدیده بسیار غیرمنتظره (بی معنی) است، اما در آخرین نسخه های کروم، فایرفاکس و حتی اینترنت اکسپلورر 11 کار می کند.

    سیریلیک و JSON

    البته، نباید از این پدیده کاملاً غیرمنتظره استفاده کنید، به یاد داشته باشید که چقدر به راحتی مقادیر متغیرهای نوشته شده با حروف روسی به کراکوزیابری تبدیل می شوند: در مورد نام ها، به خصوص نام های خارجی چه می توانیم بگوییم.

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

    مهم نیست که نوآوری نحوی مبتنی بر چه چیزی بوده است - JSON، مهم این است که یک حق قانونی و یک فرصت واقعی برای تطبیق داده است: "هر نام = هر ارزش".

    ما باید به زبان جاوا اسکریپت ادای احترام کنیم: آنچه توسط نحو ارائه می شود توسعه دهنده را ملزم نمی کند و چیزی را بر او تحمیل نمی کند. توسعه دهنده آزادانه از نحو زبان برای شکل گیری بهینه مدل داده و الگوریتم برای استفاده از آنها استفاده می کند.

    PHP و JSON

    با پذیرش داده ها در فرمت JSON، سرور (به ویژه از طریق PHP) این امکان را فراهم می کند که آنها را همانطور که هست پردازش کند و نتیجه را با فرمت مشابه به مرورگر بازگرداند. آرایه منبع PHP:

    • $cJSON = آرایه ("a"=> "alfa"، "b"=> "بتا"، "g"=> "گاما").

    تبدیل به فرمت JSON برای ارسال به مرورگر:

    • $cJS = json_encode ($cJSON).

    نتیجه:

    • ("a":"alfa"، "b":"بتا"، "g": "گاما").

    تودرتو نشان داده شده در عکس مجاز است.

    در اینجا، آرایه تشکیل شده با یک عنصر جدید "به خود" با شاخص خودکار "0" و سپس دوباره با شاخص مشخص شده "z" اضافه شده است.

    Json_decode() یک رشته JSON را به یک آرایه PHP تبدیل می کند. نتایج مشابهی را می توان با دستکاری توابع و explode() به دست آورد. در برخی موارد، این گزینه ارجح است.

    سطح تودرتو

    عناصر را می توان هم در سمت مرورگر و هم در سمت سرور درون یکدیگر قرار داد. در عمل، فرمت JSON (توصیف شده توسط RFC 4627) بیش از 4 سطح تودرتو ارائه می کند، اما این قابلیت نباید مورد سوء استفاده قرار گیرد.

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

    JSON معمولاً به عنوان ساختارهای داده ای گفته می شود که ساده تر از XML هستند و هم برای انسان و هم برای رایانه قابل درک هستند. این زمانی درست است که حجم داده کم باشد و توسعه دهنده سطح تودرتو را به درستی انتخاب کرده باشد. در همه موارد دیگر، شمارش تعداد براکت ها و درک آن هم در سمت مرورگر و هم در سمت سرور دشوار است.

    فایل های JSON

    استفاده از JSON در عمل اغلب به یک رشته کوتاه قابل دسترسی برای ادراک محدود نمی شود. هر ساختار داده همیشه عملی است. در عین حال، JSON می تواند به طور موثر هم در داده های وظیفه واقعی (کارکنان سازمانی) و هم برای اجرای داده های موقت (کش شیء) استفاده شود.

    حالت سازمانی و فرمت JSON: یک مثال

    معمولاً یک رکورد در مورد یک نفر، نام خانوادگی، نام، نام خانوادگی، سال تولد، تخصص، تحصیلات و ... و چند مقدار ساده دیگر است. حتی در شرکت‌های با تقاضای خاص، رکورد یک نفر از ده یا دو رشته تجاوز نمی‌کند. این ادراکی است و می توان آن را در ردیف پایگاه داده قرار داد.

    اگر یک شرکت چندین نفر را استخدام کند، این یک چیز است، اما اگر ده ها هزار نفر باشد، این کاملاً چیز دیگری است. می توانید به استفاده از پایگاه داده ادامه دهید، اما ذخیره آن به صورت فایل کاربردی تر و استفاده آسان تر به نظر می رسد.

    JSON یک فایل متنی ساده است. در مورد پرسنل، بسیار خوب است. شما همیشه می توانید آن را بخوانید. باز کردن و ویرایش در هر ویرایشگر متنی که عادت به اضافه کردن اطلاعات سرویس خود به محتوای فایل ندارد نیز در دسترس است. به طور کلی، *.json متن خالص است هم در داخل مرورگر و هم در داخل فایل - یک رشته.

    عکس، حافظه پنهان شیئی را که تصویر را تشکیل می دهد، نشان می دهد.

    این نمونه ای از محتویات فایلی است که توسط وب سایتی تولید شده است که پرینت سه بعدی رنگی روی لیوان ها و سرامیک ها را ارائه می دهد. طبیعتاً داشتن چنین فرمت JSON، تصمیم گیری در مورد نحوه باز کردن آن واقعاً مشکل ساز است. با این حال، در این مورد و موارد مشابه، مشکلی برای خواندن فایل وجود ندارد: PHP فایل را می خواند، آن را تجزیه می کند و به مرورگر می دهد. داده های تغییر یافته توسط بازدید کننده به سرور برگردانده شده و دوباره نوشته می شود.

    در این مورد، فایل به عنوان متغیری عمل می کند که خارج از کد ذخیره می شود. در صورت لزوم، متغیر یک مقدار از فایل دریافت می کند و اگر توسط بازدید کننده در گفتگوی ارائه شده توسط سایت تغییر داده شود، تمام تغییرات به همان صورت ثبت می شود. نیازی به خواندن و بررسی محتویات فایل نیست.

    JSON اغلب برای ذخیره و استفاده از اطلاعات خدمات استفاده می شود - این جدول کارکنان نیست، نه توسعه دهنده و نه بازدید کننده سایت نیازی به دیدن آن ندارند.

    XML و JSON

    "برای هر چیزی زمانی وجود دارد" یک دانش کلاسیک است که حتی قبل از ظهور برنامه نویسی به عنوان یک اصل پذیرفته شده است. "هیچ چیز مثل آن ظاهر نمی شود" - این نیز قبل از نوشتن اولین برنامه قابل فهم توسط انسان به زبان مصنوعی بود.

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

    XML به طرز شگفت انگیزی با وظایف خود کنار می آید و به وضوح در تاریخ ثبت نخواهد شد. و JSON تا سال 2006 استفاده می شد، فقط هر توسعه دهنده ای وظیفه خود نمی دانست که گزینه های خاصی را برای ارائه داده های خود اعلام کند.

    در عمل مواردی وجود داشته است که برنامه‌هایی به زبان بیسیک نوشته شده‌اند که از JSON استفاده نمی‌کنند، اما جفت‌های name = value را کاملاً ذخیره کرده و در زمان مناسب در اختیار الگوریتم‌های مناسب قرار داده‌اند.

    کاراکترهای ویژه ("`"، "~"، "|،...) و قالب های داده

    عادت کار با آرایه ها و اشیاء انجمنی در جاوا اسکریپت استفاده از JSON را طبیعی و راحت می کند. این در واقع یک قالب عالی است، اما توانایی تقسیم و پیوستن، دستکاری رشته ها و آرایه ها، ریشه های بسیار عمیق تری دارد.

    توابع join/split و implode/explode جاوا اسکریپت به شما این امکان را می دهد که به راحتی و کارآمد از هر دو فرمت داده XML و JSON و همچنین نسخه خود استفاده کنید. دومی اغلب بهتر است، در حالی که دو مورد اول برای موارد استفاده عمومی ایده آل هستند. اگر اطلاعات به توسعه دهنده، سرور، فایل یا پایگاه داده دیگری منتقل می شود، XML و JSON بهتر است پیدا نشوند. همه با آنها کار می کنند، بنابراین انتقال / دریافت اطلاعات نیازی به اظهار نظر ندارد.

    استفاده از JSON در اندروید

    خواندن و نوشتن داده ها با فرمت JSON در اندروید نه تنها معمول است، بلکه اشیاء زیادی وجود دارند که برای کار با این فرمت داده خاص طراحی شده اند.

    از فرمت JSON استفاده می کند. شاید این درست باشد، اما سوال در پدیده بودن شبکه های اجتماعی نیست، بلکه در این است که ارائه اطلاعات در قالب "نام = ارزش" واقعا هم برای برنامه نویسی و هم برای استفاده راحت است. بر خلاف سختگیرانه و بدنام "XML"، این قالب واقعاً انسان پسند است.

    آرایه های انجمنی

    این اتفاق افتاد که متغیرها باید توصیف شوند (جاوا اسکریپت) یا حداقل مقدار اولیه (PHP) را نشان دهند. در هر دو مورد، متغیر می تواند به راحتی نوع خود را تغییر دهد. زبان در صورت لزوم این تبدیل را به طور خودکار انجام می دهد.

    اما چرا متغیر نباید نام خود را نیز تغییر دهد، در حین اجرای الگوریتم ظاهر شود و زمانی که دیگر به آن نیاز نیست ناپدید شود؟ آرایه‌های انجمنی این مشکل را حل می‌کنند، اما وقتی از چنین متغیرهای نسبتاً پویایی استفاده می‌شود، نام آرایه و ساختارهای نحوی مربوطه در جایی که اعمال می‌شوند دنبال می‌شوند.

    این شرایط مخصوصاً در PHP تلفظ می‌شود، اما شما می‌توانید با آن کنار بیایید، با این حال، با نماد «$» در نام متغیر و ترکیب «$this->» در داخل شی. برنامه نویسی همزمان در جاوا اسکریپت و پی اچ پی، ابتدا واقعاً تعجب می کنید که چگونه همه چیز متفاوت است، اما بعد همه چیز بسیار آشنا و طبیعی می شود ...

    آرایه انجمنی -> JSON

    در این مثال، یک سند *.docx با استفاده از کتابخانه PHPOffice/PHPWord ایجاد می‌شود و آرایه aProperties حاوی ویژگی‌های سند (نویسنده، شرکت، عنوان، دسته، تاریخ ایجاد...) است.

    آرایه دوم حاوی داده های صفحه است:

    • جهت گیری (منظره یا عادی)؛
    • ابعاد عمودی و افقی؛
    • بالشتک (حاشیه چپ، بالا، پایین، راست)؛
    • سرصفحه ها و پاورقی ها

    سند بر روی سروری که کتابخانه PHPOffice/PHPWord در آن نصب شده است ایجاد می شود. این سایت امکان مدیریت مقادیر این آرایه ها را با استفاده از جاوا اسکریپت فراهم می کند. نتیجه در فرمت JSON به سرور برگردانده می شود و در الگوریتم های PHP، در ساختارهای آن، یعنی در آرایه ها استفاده می شود.

    متغیرهای پویا

    فرمت JSON مشکل متغیرهای پویا را حل می کند. در اینجا می توانید متغیرها را بدون درهم ریختگی نحوی غیر ضروری ایجاد، اصلاح و حذف کنید. زیبا به نظر می رسد و در جاوا اسکریپت استفاده می شود.

    در این مثال، تابع GetOjInfo() نام و مقدار مقدار را از شی واکشی می کند. در ابتدا، شی رشته JSON اختصاص داده شده به متغیر ojInfo سه عنصر دارد: نام، سن و کار. کمی بعد، متغیر Status اضافه می شود.

    پس از اولین دستور حذف، خط ojInfo عنصر سن را از دست می دهد، پس از حذف دوم - عنصر کار. اگر فرض کنیم که این خط مجموعه ای از متغیرهایی است که معنای خاصی دارند، با استفاده از JSON می توانید در واقع هر یک از مجموعه های آنها را خارج از زمینه عملیاتی (سینتکس) توضیحات و پردازش زبان جاوا اسکریپت ایجاد، تغییر و حذف کنید.

    فرمت JSON برای این گزینه طراحی نشده است، اما این امکان، عملی و راحت است.

    نحو JSON زیر مجموعه ای از نحو جاوا اسکریپت است.

    قوانین نحوی JSON

    نحو JSON از نحو شیء نشانه گذاری جاوا اسکریپت مشتق شده است:

    • داده ها در جفت نام/مقدار
    • داده ها با کاما از هم جدا شده اند
    • بریس های فرفری اجسام را نگه می دارند
    • براکت های مربع آرایه ها را نگه می دارند

    داده های JSON - نام و مقدار

    داده های JSON به صورت جفت نام/مقدار نوشته می شود.

    جفت نام/مقدار متشکل از نام فیلد (در گیومه‌های دوتایی) و به دنبال آن یک دونقطه و مقدار زیر است:

    مثال

    "firstName": "جان"

    نام های JSON به نقل قول های دوگانه نیاز دارند. نام جاوا اسکریپت نیست.

    مقادیر JSON

    مقادیر JSON می تواند باشد:

    • سری (عدد صحیح یا شناور)
    • رشته (در دو گیومه)
    • بولی (درست یا نادرست)
    • آرایه (در پرانتز)
    • شی (در پرانتز فرفری)

    اشیاء JSON

    اشیاء JSON در پرانتزهای مجعد نوشته می شوند.

    درست مانند جاوا اسکریپت، اشیاء JSON می توانند شامل چندین جفت نام/مقدار باشند:

    مثال

    ("firstName":"John"، "LastName":"Doe")

    آرایه های JSON

    آرایه های JSON در براکت نوشته می شوند.

    درست مانند جاوا اسکریپت، یک آرایه JSON می‌تواند شامل چندین شیء باشد:

    مثال

    "کارمندان":[

    ("firstName":"Peter"، "LastName":"Jones")
    ]

    در مثال بالا، شی "کارکنان" آرایه ای است که شامل سه شی است. هر شیء رکورد یک شخص (با نام و نام خانوادگی) است.

    JSON از JavaScript Syntax استفاده می کند

    از آنجا که نحو JSON از نماد شی جاوا اسکریپت مشتق شده است، نرم افزار اضافی بسیار کمی برای کار با JSON در جاوا اسکریپت مورد نیاز است.

    با جاوا اسکریپت می‌توانید آرایه‌ای از اشیاء ایجاد کنید و داده‌ها را به آن اختصاص دهید، مانند:

    مثال

    کارمندان var = [
    ("firstName":"John"، "LastName":"Doe")
    ("firstName":"Anna"، "LastName":"Smith")
    ("firstName":"Peter"، "LastName": "Jones")
    ];

    اولین ورودی در آرایه ای از اشیاء جاوا اسکریپت را می توان به صورت زیر مشاهده کرد:

    همچنین، می توانید آن را به صورت زیر دریافت کنید:

    داده ها را می توان به صورت زیر تغییر داد:

    همچنین می توان آن را به صورت زیر تغییر داد:

    در فصل بعد، نحوه تبدیل متن JSON به یک شی جاوا اسکریپت را خواهید آموخت.

    فایل های JSON

    • نوع فایل برای فایل های JSON ".json"
    • نوع MIME برای متن JSON "application/json"