نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی

JSON چیست؟ فرمت JSON: مثال و توضیحات.

متشکل از جفت صفت-مقدار. این رایج ترین فرمت داده ای است که برای ارتباط ناهمزمان بین مرورگر و سرور استفاده می شود و تا حد زیادی جایگزین XML (با استفاده از AJAX) می شود.

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

تاریخچه خلقت

فرمت JSON در ابتدا توسط داگلاس کراکفورد در اوایل دهه 2000 توسعه یافت و متعاقباً توسط دو استاندارد رقیب (RFC 7159 و ECMA-404) در سال 2013 تعریف شد. استاندارد ECMA فقط نحو معتبر را توصیف می کند، در حالی که RFC برخی از امنیت و قابلیت همکاری اولیه را پوشش می دهد.

علاوه بر این، استانداردی به نام RFC 7493 وجود دارد که یک نمایه محدود به نام I-JSON (مخفف "Internet JSON") را تعریف می کند. به دنبال غلبه بر برخی مشکلات قابلیت همکاری است. هر یک از این اسناد یک سند JSON معتبر است.

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

توسعه و کاربرد

همانطور که قبلاً اشاره شد، داگلاس کراکفورد، به عنوان خالق شرکت StateSoftware، ابتدا فرمت JSON را شناسایی و رایج کرد. بنیانگذاران متعاقباً با ایجاد سیستمی موافقت کردند که از قابلیت‌های استاندارد مرورگر استفاده می‌کرد و یک لایه انتزاعی برای توسعه‌دهندگان فراهم می‌کرد تا برنامه‌هایی را با اتصال دائمی تمام دوبلکس به یک وب سرور ایجاد کنند. در همان زمان، امکان باز نگه داشتن دو اتصال HTTP و پردازش آنها تا زمان عملکرد استاندارد مرورگر در صورت عدم تبادل داده وجود داشت. بنیانگذاران یک میز گرد برگزار کردند و به نام فرمت داده JSML یا JSON و همچنین تعیین نوع مجوزی که توسعه جدید تحت آن در دسترس خواهد بود، رأی دادند. قالب در حال حاضر منبع باز است.

استفاده عملی

وب سایت JSON.org در سال 2002 راه اندازی شد. در دسامبر 2005، Yahoo! شروع به ارائه برخی از خدمات وب خود در این قالب کرد. گوگل تنها در دسامبر 2006 شروع به استفاده از فیدهای JSON برای پروتکل وب GData خود کرد.

فرمت فایل JSON در ابتدا برای و معمولاً همراه با زیرمجموعه ای از زبان برنامه نویسی جاوا اسکریپت (به ویژه استاندارد ECMA-262 3rd Edition-December) در نظر گرفته شده بود. با این حال، این یک قالب مستقل از زبان داده است. کد برای تجزیه و تولید داده های JSON در بسیاری از زبان های برنامه نویسی موجود است. وب سایت JSON همه کتابخانه ها را فهرست می کند.

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

خود JSON در سال 2013 به عنوان استاندارد ECMA-404 به یک استاندارد بین المللی ECMA تبدیل شد که در همان سال به عنوان مرجع در RFC 7158 استفاده شد. در سال 2014، RFC 7159 مرجع اصلی استفاده از JSON در اینترنت شد (مثلاً برنامه MIME/json).

انواع داده ها، نحو و مثال

انواع داده های اصلی JSON عبارتند از:

  • عدد: یک عدد اعشاری امضا شده که می تواند شامل یک قسمت کسری باشد و می تواند از نماد E نمایی استفاده کند، اما نمی تواند شامل غیر اعداد (مانند NaN) باشد. فرمت بین اعداد صحیح و اعداد ممیز شناور تمایز قائل نمی شود. جاوا اسکریپت از فرمت ممیز شناور با دقت مضاعف برای تمام مقادیر عددی خود استفاده می‌کند، اما زبان‌های دیگری که JSON را پیاده‌سازی می‌کنند ممکن است آن‌ها را متفاوت کدگذاری کنند.

  • رشته: دنباله ای از کاراکترهای صفر یا بزرگ یونیکد. رشته‌ها با گیومه‌های دوتایی مشخص می‌شوند و از نحو بک اسلش پشتیبانی می‌کنند.
  • لفظ: هر یک از درست یا نادرست.
  • آرایه: لیست مرتب شده ای از مقادیر صفر یا بیشتر که هر کدام می تواند از هر نوع باشد. آرایه ها از براکت مربع با کاما استفاده می کنند.
  • Object: مجموعه ای نامرتب از جفت های نام/مقدار، که در آن نام ها (که کلید نیز نامیده می شود) رشته هستند. از آنجایی که اشیاء برای نمایش آرایه‌های انجمنی در نظر گرفته شده‌اند، توصیه می‌شود (البته الزامی نیست) که هر کلید درون آن منحصربه‌فرد باشد. اشیاء با پرانتزهای مجعد از هم جدا می شوند و از کاما برای جدا کردن هر جفت استفاده می کنند، در حالی که در هر جفت، یک کاراکتر دونقطه کلید یا نام را از مقدار آن جدا می کند.
  • Null: یک مقدار خالی با استفاده از کلمه null.

فضای سفید محدود مجاز است و می تواند در اطراف یا بین عناصر نحوی (مقادیر و علائم نگارشی، اما نه در یک مقدار رشته) قرار گیرد. برای این منظور تنها چهار کاراکتر ویژه فضای خالی در نظر گرفته می شود: space، tab، newline و slash. به طور خاص، علامت ترتیب بایت نیازی به تولید مربوط به پیاده سازی ندارد (اگرچه ممکن است هنگام تجزیه JSON پذیرفته شود). یک درخواست JSON دستوری برای نظرات ارائه نمی دهد.

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

مشکلات حمل و نقل داده ها

اگرچه داگلاس کراکفورد در ابتدا استدلال می کرد که JSON زیرمجموعه ای دقیق از جاوا اسکریپت است، مشخصات آن در واقع اجازه می دهد اسنادی ایجاد شود که توسط جاوا اسکریپت قابل خواندن نیستند. به طور خاص، JSON به مقادیر رشته یونیکد U+2028 LINE SEPARATOR و U+2029 PARATOR SEPARATOR اجازه می‌دهد تا در خطوط نقل‌قول‌شده به‌صورت بدون فرار ظاهر شوند، اما جاوا اسکریپت اینطور نیست. این نتیجه این است که JSON فقط «کاراکترهای کنترلی» را مجاز نمی‌داند. برای حداکثر سازگاری، این کاراکترها باید با بک اسلش فرار کنند. این ظرافت هنگام ایجاد JSONP مهم است.

فرمت JSON: چگونه آن را باز کنیم؟

اسناد JSON را می توان در UTF-8، UTF-16 یا UTF-32 کدگذاری کرد، کدگذاری پیش فرض UTF-8 است. این استانداردها از مجموعه کامل نویسه‌های «یونیکد»، از جمله نویسه‌های خارج از صفحه چند زبانه اصلی (U+10000 تا U+10FFFF) پشتیبانی می‌کنند. با این حال، در صورت فرار، این نویسه‌ها باید با استفاده از جفت‌های جایگزین UTF-16 نوشته شوند، جزئیاتی که توسط برخی تجزیه‌کننده‌های فرمت JSON از قلم افتاده است. چگونه می توان چنین فایلی را باز کرد و چگونه خوانده می شود؟

اعداد در این قالب نسبت به نمایش آنها در زبان های برنامه نویسی آگنوستیک هستند. هیچ تفاوتی بین یک عدد صحیح و یک مقدار ممیز شناور وجود ندارد: برخی از پیاده سازی ها ممکن است 42، 42.0، و 4.2E + 1 را به عنوان یک عدد در نظر بگیرند، در حالی که برخی دیگر ممکن است این عدد را نداشته باشند. علاوه بر این، هیچ الزامی در مورد مسائلی مانند سرریز، زیر جریان، از دست دادن دقت یا گرد کردن وجود ندارد. علاوه بر این، فرمت JSON هیچ چیزی در مورد مدیریت تهی های امضا شده، صرف نظر از اینکه 0.0 غیر از -0.0 باشد، نمی گوید. اکثر پیاده سازی هایی که از استاندارد IEEE 754 ممیز شناور استفاده می کنند، از جمله جاوا اسکریپت، صفرهای امضا شده را حفظ می کنند، اما همه پیاده سازی های JSON نمی توانند این کار را انجام دهند.

استفاده در جاوا اسکریپت

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

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

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

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

انواع داده های بومی پشتیبانی نشده

نحو جاوا اسکریپت چندین نوع داده بومی را تعریف می کند که در استاندارد JSON گنجانده نشده اند: Map، Set، Date، Error، Regular Expression، Function و چندین نوع دیگر. این انواع داده جاوا اسکریپت باید در قالب دیگری نمایش داده شوند و هر دو برنامه در مورد نحوه تبدیل بین انواع توافق دارند. امروزه برخی استانداردهای واقعی وجود دارد، مانند تبدیل تاریخ به رشته، اما هیچ یک از آنها به طور کلی پذیرفته نمی شوند. زبان های دیگر ممکن است مجموعه متفاوتی از انواع بومی داشته باشند که برای مقابله با این نوع تبدیل باید به دقت سریال شوند.

طرحواره JSON

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

طرحواره بر اساس مفاهیم XML Schema (XSD) است، اما اختصاصی است. مانند XSD، امکانات سریال‌سازی/آسیالی‌زدایی یکسان برای طرح‌واره و داده‌ها استفاده می‌شود.

Schema یک پروژه اینترنتی است که در حال حاضر در نسخه 5 (منتشر شده در 13 اکتبر 2016) است. اعتبار سنجی های متعددی برای زبان های برنامه نویسی مختلف وجود دارد که هر کدام دارای سطح انطباق متفاوتی هستند. هیچ پسوند استانداردی برای فایل وجود ندارد، اما برخی از کارشناسان assert.schema.json را پیشنهاد می کنند.

نوع MIME

نوع رسمی MIME برای متن JSON "application/json" است. اگرچه اکثر پیاده‌سازی‌های مدرن از نوع رسمی MIME استفاده می‌کنند، بسیاری از برنامه‌ها همچنان به پشتیبانی قدیمی برای سایر انواع MIME ادامه می‌دهند. بسیاری از ارائه‌دهندگان خدمات، مرورگرها، سرورها، برنامه‌های کاربردی وب، کتابخانه‌ها، چارچوب‌ها و APIها از یک نوع MIME که محتوای آن به‌عنوان «text/json» یا «text/javascript» ظاهر می‌شود، استفاده می‌کنند، انتظار دارند یا تشخیص می‌دهند. نمونه های قابل توجه عبارتند از Google Search API، Yahoo!، Flickr، Facebook API، DojoToolkit 0.4 و غیره.

JSON-RPC

JSON-RPC یک پروتکل فراخوانی رویه از راه دور (RPC) است که بر روی JSON ساخته شده و به عنوان جایگزینی برای XML-RPC یا SOAP طراحی شده است. این یک پروتکل ساده است که تنها چند نوع داده و دستور را تعریف می کند. این امکان را به سیستم می‌دهد تا اعلان‌ها (اطلاعاتی به سرور که نیازی به پاسخگویی ندارند) و تماس‌های متعددی را به سرور ارسال کند که می‌توانند بدون ترتیب به آنها پاسخ دهند.

A.J.A.J.

جاوا اسکریپت ناهمزمان و JSON (یا AJAJ) به همان متدولوژی صفحه وب پویا مانند Ajax اشاره دارند، اما به جای XML، JSON فرمت داده اولیه است. AJAJ یک فناوری توسعه وب است که یک صفحه وب را قادر می سازد پس از بارگیری در مرورگر، داده های جدیدی را درخواست کند. معمولاً آنها را در پاسخ به اقدامات کاربر در آن صفحه از سرور نمایش می دهد. به عنوان مثال، آنچه کاربر در یک فیلد جستجو تایپ می‌کند، سپس توسط کد مشتری به سرور ارسال می‌شود، که بلافاصله با یک لیست کشویی از آیتم‌های پایگاه داده منطبق پاسخ می‌دهد.

مسائل امنیتی

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

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

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

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

بنابراین، تابع جدید JSON.parse به عنوان جایگزین امن‌تری برای eval طراحی شد. این به طور خاص برای پردازش داده های JSON طراحی شده است، نه جاوا اسکریپت. در ابتدا برای گنجاندن در ویرایش چهارم استاندارد ECMAScript برنامه ریزی شده بود، اما این اتفاق نیفتاد. اولین بار در نسخه 5 اضافه شد و اکنون توسط مرورگرهای اصلی پشتیبانی می شود.

JSON (JavaScript Object Notation) فرمتی برای تبادل داده ها به صورت متنی است. امکان انتقال ساختارهای داده پیچیده به صورت سریالی. این فرمت انتقال داده به قدری محبوب شده است که در هسته PHP، با شروع نسخه 5.2.0، توابعی برای پردازش داده ها در این قالب اضافه شده است. این بدان معنی است که نیازی به اتصال افزونه های اضافی وجود ندارد. فرمت داده JSON بسیار قابل خواندن توسط انسان است. علاوه بر این، این نوع تبادل داده به طور گسترده ای بین سرویس های مختلف API استفاده می شود. و با توسعه صحیح الگوریتم‌های تبادل اطلاعات، می‌توانید سرعت بسیار بالایی نسبت به مثلاً هنگام کار با داده‌ها در قالب XML داشته باشید.

ارسال داده

دو راه برای ارسال داده در فرمت JSON وجود دارد: یک درخواست GET یا POST با داده های رمزگذاری شده در متغیر GET یا POST تشکیل دهید، یا داده ها را در بدنه سند قرار دهید. در عمل معمولاً از گزینه دوم استفاده می شود.

برای ارسال داده ها، توابع زیر مورد نیاز است:

  • رشته json_encode (مقدار ترکیبی [، گزینه های int = 0 ])

    پارامتر مقدار داده هایی را که باید کدگذاری شوند را مشخص می کند. هر نوع به جز نوع پشتیبانی می شود منبع. پارامتر گزینه ها حاوی یک بیت ماسک از مقادیر ارائه شده ممکن است (جدول با ثابت های JSON ارائه شده را ببینید).

  • منبع stream_context_create (])

    این تابع برای ایجاد و برگرداندن یک زمینه رشته با گزینه های مشخص شده در پارامتر گزینه طراحی شده است. پارامتر گزینه های اختیاری باید از نوع آرایه انجمنی باشد. در ابتدا خالی است. دومین پارامتر اختیاری پارامترها نیز باید یک آرایه انجمنی در قالب $data['name'] = مقدار باشد.

  • رشته file_get_contents (نام فایل رشته [، bool use_include_path [، زمینه منبع [، int offset [، int maxlen]]]]

    با استفاده از این تابع می توانید محتویات یک فایل را به صورت رشته ای دریافت کنید. پارامتر filename نام فایلی است که باید خوانده شود. در پارامتر use_include_path، با شروع از PHP 5، می توانید از ثابت استفاده کنید FILE_USE_INCLUDE_PATHبرای جستجوی یک فایل در مسیر include. پارامتر context منبع زمینه ایجاد شده با استفاده از تابع stream_context_create () را نشان می دهد. اگر تلاش برای باز کردن فایل با شکست مواجه شد، مقدار برگردانده می شود نادرست. پارامتر offset حاوی افستی است که خواندن داده ها از آن آغاز می شود. پارامتر maxlen اندازه داده های دریافتی را مشخص می کند.

    توجه: هنگام کار با رشته های راه دور، افست مشخص نشده است.

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

// داده برای ارسال $request = array("StartDate" => "2013-10-10", "EndDate" => "2013-10-10", "IDS" => array(1,2,3,4 ,5,6,7))؛ // تعیین گزینه‌ها برای زمینه جریان $options = آرایه ("http" => آرایه ("method" => "POST", "header" => "Content-Type: application/json; charset=utf-8\r \ n", "content" => json_encode($request))); // ایجاد یک زمینه جریان $context = stream_context_create($options); // ارسال داده و دریافت نتیجه echo file_get_contents("http://test.ru/json.php", 0, $context);

در اینجا از یک ساختار داده بداهه استفاده می شود که شامل تاریخ شروع و پایان و همچنین آرایه ای از اعداد برخی رکوردهای شرطی است. لطفا توجه داشته باشید که در هدر درخواست نوع محتوانوع “application/json” مشخص شده است.

در حال دریافت اطلاعات

برای دریافت داده های ارسالی به روشی که در بالا توضیح داده شد، لازم است داده ها را از جریان ورودی خوانده شود. php://input”.

توابع مورد استفاده برای پذیرش داده ها:

  • json_decode مخلوط (رشته json [، bool assoc = false [، عمق int = 512 [، گزینه‌های int = 0 ]]]

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

  • منبع منبع (نام فایل رشته، حالت رشته [، bool use_include_path [، زمینه منبع]])

    یک فایل را باز می کند و دسته آن را برمی گرداند. پارامتر filename منبعی با نام است که به یک فایل اشاره می کند. پارامتر mode نوع دسترسی به فایل را مشخص می کند (جدول را با لیست حالت های ممکن برای fopen() ببینید). سپس دو پارامتر اختیاری وجود دارد: use_include_path و context. هنگام تنظیم use_include_path به درست است، واقعییا 1 و به شرطی که یک مسیر نسبی به عنوان یک منبع با نام مشخص شده باشد، فایلی که باید باز شود در لیست دایرکتوری های مورد استفاده توابع جستجو می شود. عبارتند ازو نیاز. در عمل، این پارامتر عملا استفاده نمی شود. پارامتر context برای مشخص کردن زمینه منبع استفاده می شود.

  • رشته stream_get_contents (دسته منبع [, int maxlen = -1 [, int offset = -1 ]])

    این تابع به شما این امکان را می دهد که محتوای یک جریان را به صورت رشته دریافت کنید. پارامتر handle یک منبع رشته است. پارامتر maxlen حاوی حداکثر تعداد بایت برای خواندن است. به طور پیش فرض روی -1 تنظیم شده است که نشان می دهد تمام داده ها دریافت شده اند. پارامتر offset حاوی افستی است که خواندن داده ها از آن آغاز می شود. به طور پیش فرض روی -1 نیز تنظیم شده است، به این معنی که خواندن از موقعیت شروع انجام می شود.

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

// جریان ورودی را برای خواندن $f = fopen("php://input", "r") باز کنید. // محتویات جریان را دریافت کنید $data = stream_get_contents($f); if ($data) (// کد پردازش print_r(json_decode($data))؛ )

ساختار داده به دست آمده:

شیء StdClass ( => 2013-10-10 => 2013-10-10 => آرایه ( => 1 => 2 => 3 => 4 => 5 => 6 => 7))

توجه: باید این واقعیت را در نظر گرفت که برای کار با فرمت JSON، داده ها باید در utf-8 کدگذاری شوند.

JSON ثابت هایی را برای تابع json_encode() ارائه کرد

JSON_HEX_TAG (عدد صحیح) همه در \u003C و \u003E کدگذاری شده اند. از PHP 5.3.0 در دسترس است.
JSON_HEX_AMP (عدد صحیح) همه و در & کدگذاری شده اند. از PHP 5.3.0 در دسترس است.
JSON_HEX_APOS (عدد صحیح) همه کاراکترها در \u0027 کدگذاری می شوند. از PHP 5.3.0 در دسترس است.
JSON_HEX_QUOT (عدد صحیح) همه کاراکترهای " در \u0022 کدگذاری می شوند. از PHP 5.3.0 موجود است.
JSON_FORCE_OBJECT (عدد صحیح) هنگام استفاده از آرایه غیر انجمنی، یک شی را به جای آرایه برگردانید. این زمانی مفید است که برنامه یا کد دریافت کننده انتظار یک شی را داشته باشد یا آرایه خالی باشد. از PHP 5.3.0 در دسترس است.
JSON_NUMERIC_CHECK (عدد صحیح) رمزگذاری رشته های حاوی اعداد به عنوان اعداد. از PHP 5.3.3 در دسترس است.
JSON_BIGINT_AS_STRING (عدد صحیح) اعداد صحیح بزرگ را به عنوان معادل رشته آنها کد می کند. از PHP 5.4.0 در دسترس است.
JSON_PRETTY_PRINT (عدد صحیح) از کاراکترهای فضای خالی در داده های برگشتی برای قالب بندی آن ها استفاده کنید. از PHP 5.4.0 در دسترس است.
JSON_UNESCAPED_SLASHES (عدد صحیح) فرار نکن /. از PHP 5.4.0 در دسترس است.
JSON_UNESCAPED_UNICODE (عدد صحیح) کاراکترهای چند بایتی یونیکد را رمزگذاری نکنید (به طور پیش‌فرض به صورت \uXXXX کدگذاری می‌شوند). از PHP 5.4.0 در دسترس است.

لیست حالت های ممکن برای fopen() با استفاده از حالت

'r' فایل فقط خواندنی را باز می کند. نشانگر را در ابتدای فایل قرار می دهد.
'r+' فایلی را برای خواندن و نوشتن باز می کند. نشانگر را در ابتدای فایل قرار می دهد.
'w' فایل را فقط برای نوشتن باز می کند. یک اشاره گر در ابتدای فایل قرار می دهد و طول فایل را به صفر می رساند. اگر فایل وجود نداشته باشد، سعی می کند آن را ایجاد کند.
'w+' فایلی را برای خواندن و نوشتن باز می کند. یک اشاره گر در ابتدای فایل قرار می دهد و طول فایل را به صفر می رساند. اگر فایل وجود نداشته باشد، سعی می کند آن را ایجاد کند.
'آ' فایل را فقط برای نوشتن باز می کند. نشانگر را در انتهای فایل قرار می دهد. اگر فایل وجود نداشته باشد، سعی می کند آن را ایجاد کند.
"a+" فایلی را برای خواندن و نوشتن باز می کند. نشانگر را در انتهای فایل قرار می دهد. اگر فایل وجود نداشته باشد، سعی می کند آن را ایجاد کند.
'ایکس' ایجاد می کند و فقط برای نوشتن باز می شود. نشانگر را در ابتدای فایل قرار می دهد. اگر فایل از قبل وجود داشته باشد، فراخوانی ()fopen با شکست مواجه می شود، FALSE را برمی گرداند و یک خطای E_WARNING ایجاد می کند. اگر فایل وجود نداشته باشد، سعی می کند آن را ایجاد کند. این معادل مشخص کردن پرچم‌های O_EXCL|O_CREAT برای فراخوانی سیستم داخلی open(2) است.
'x+' ایجاد می کند و برای خواندن و نوشتن باز می کند. در غیر این صورت رفتاری مشابه با 'x' دارد.
'ج' فایل را فقط برای نوشتن باز می کند. اگر فایل وجود نداشته باشد، ایجاد می شود. اگر فایل وجود داشته باشد، آن را کوتاه نمی کند (برخلاف 'w')، و فراخوانی این تابع باعث خطا نمی شود (مانند مورد 'x'). نشانگر فایل روی ابتدای فایل تنظیم می شود. این می تواند مفید باشد اگر بخواهید قبل از تغییر فایل (به flock()) آن را قفل کنید، زیرا با استفاده از 'w' می توانید فایل را قبل از به دست آوردن قفل کوتاه کنید (اگر می خواهید فایل را کوتاه کنید، می توانید از ftruncate استفاده کنید. () پس از درخواست قفل عمل می کند.
'c+' فایلی را برای خواندن و نوشتن باز می کند. در غیر این صورت همان رفتار "c" را دارد.

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

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

var data=( "firstName" : "Ray" ); هشدار(data.firstName);

ابتدا یک متغیر برای نگهداری داده ها ایجاد می کنیم و سپس از JSON برای تعریف یک شی استفاده می کنیم. شی ما بسیار ساده است: یک فیلد firstName و یک مقدار Ray. رشته ها در JSON باید در گیومه قرار بگیرند. اگر از اعداد استفاده می کنید، نقل قول ها اختیاری هستند.

این مثال مقدار خاصیت firstName را در مرورگر نمایش می دهد.

ایجاد یک شیء نگهدارنده مکان

بیایید یک مثال واقعی‌تر ایجاد کنیم: داده‌های JSON خود را در یک شی DOM وارد کنیم.

var data=("firstName":"Ray"); document.getElementById("placeholder").innerHTML=data.firstName;

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

data=( "firstName":"Ray", "lastName":"Villalobos", "joined":2012 ); document.getElementById("placeholder").innerHTML=data.firstName+" "+data.lastName+" "+data.joined;

توجه داشته باشید که داده های JSON به روشی خاص برای درک بهتر قالب بندی شده اند. فیلد "joined" دارای مقدار 2012 است که نیازی به نقل قول ندارد زیرا یک عدد است. بیایید به چیز پیچیده تر نگاه کنیم.

اضافه کردن آرایه ها

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

Var data=("users":[ ( "firstName":"Ray", "lastName":"Villalobos", "joined":2012 ), ( "firstName":"John", "LastName":"Jones", "joined":2010 ) ]) document.getElementById("placeholder").innerHTML=data.users.firstName + " " + data.users.lastName+" "+ data.users.joined;

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

توجه کنید که چگونه کد برای درج نام تغییر کرده است. ما شیء کاربران جدید را به هم وصل کردیم و سپس از براکت های مربع برای اشاره به اولین عنصر در آرایه استفاده کردیم. بیایید یک سطح دیگر به ساختار داده های خود اضافه کنیم.

Var data=("users":[ ( "firstName":"Ray", "lastName":"Villalobos", "joined": ( "month":"January", "day":12, "year":2012 ) ), ( "firstName":"John"، "lastName":"Jones"، "joined": ( "month":"April"، "day":28، "year":2010 )) ]) سند. getElementById("placeholder").innerHTML=data.users.firstName + " " + data.users.lastName+"--"+ data.users.joined.month;

ویژگی joined اکنون حاوی یک شی با چندین فیلد است. نیازی به استفاده از آرایه نیست، بنابراین از نشانه گذاری شی استفاده می کنیم. اکنون ما داده هایی برای چندین کاربر داریم، وقت آن است که هر کاربر را مرور کنیم و آنها را در لیست نمایش دهیم.

پیاده سازی لیستی از کاربران (در حال عبور از شی JSON)

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

Var data = ( "users":[ ( "firstName":"Ray", "lastName":"Villalobos", "joined": ( "month":"January", "day":12, "year":2012 ) ), ( "firstName":"John", "lastName":"Jones"، "joined": ( "month":"April"، "day":28، "year":2010 ) ) ]) خروجی var ="

    "; ) خروجی +="
"; document.getElementById("placeholder").innerHTML=output;

برای تکرار در تمام خصوصیات یک شی، یک ساختار for..in وجود دارد:

برای (کلید var در شی) ( // کلید - نام ویژگی // شی - مقدار ویژگی... )

در اینجا تمام عناصر آرایه را مرور می کنیم. داده ها را در متغیر خروجی ذخیره می کنیم و داده ها را در عنصری با شناسه برابر با مکان نگهدار قرار می دهیم. می توانید بگویید که داده های ما کمی کند ساخته می شوند.

خواندن JSON از یک فایل خارجی

خوب است که داده ها را در یک فایل خارجی ذخیره کنید و در صورت نیاز آن را بخوانید. من قصد دارم از کتابخانه jQuery استفاده کنم و بنابراین ابتدا باید کتابخانه jQuery را اضافه کنیم. سپس تابع getJSON را فراخوانی می کنیم. این چیزی است که کد ما به نظر می رسد:

نمونه JSON $.getJSON("data.json", function(data) ( var output="

    "; برای (var i در data.users) (output+="
  • " + data.users[i].firstName + " " + data.users[i].lastName + "--" + data.users[i].joined.month+"
  • "; ) خروجی +="
"; document.getElementById("placeholder").innerHTML=output; ));

این تقریباً همان کد است، اما داده ها آورده شده است. ما به سادگی همه چیز را با یک تابع getJSON جمع کردیم که تمام کارهای سخت خواندن فایل را انجام می دهد. فرض کنید فایل داده data.json در همان دایرکتوری قرار دارد و به شکل زیر است:

("users":[ ("firstName":"Ray"، "lastName":"Villalobos"، "joined": ( "month":"January"، "day":12، "year":2012) ) ( "firstName":"John", "lastName":"Jones"، "joined": ( "month":"April"، "day":28، "year":2010 ) ])

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

JSON از سال 1999 بخشی از استاندارد ECMAScript بوده است، زمانی که ECMA تابع eval() را برای مدیریت فرمت تعریف کرد. همراه با موفقیت روزافزون آژاکس شروع به محبوبیت کرد. کلمه JSON اغلب زمانی که شخصی در مورد Ajax صحبت می کند به میان می آید. شناخته شده است که JSON یک فرمت داده متفاوت است، که جایگزین XML می شود و بسیاری از برنامه نویسان فعالانه از آن پشتیبانی می کنند. اما واقعا JSON چیست و چه مزایایی دارد؟

چرا JSON؟

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

JSON و XML

مزایای JSON:

  • آسان برای خواندن و درک.
  • آسان برای استفاده.

مزایای XML:

  • دارای گزینه های گسترش

هر دو XML و JSON توانایی ادغام مقادیر زیادی از داده ها را به صورت باینری دارند.

نحو JSON

اجزای JSON:

  • اشیاء: شامل اشیاء یا صفات است.
  • متغیرهای اسکالر: عدد، رشته، متغیر منطقی.
  • آرایه.
  • مقادیر تحت اللفظی: خالی, درست است، واقعی, نادرست, "رشته کاراکتر"، و مقادیر عددی.
یک شی

حاوی یک عنصر یا فهرستی از عناصر است که در آن هر عنصر به شرح زیر است:

"name" : "ارزش"

نحو شیء:

(عنصر، عنصر، ....)

آرایه

مجموعه ای از مقادیر که با کاما از هم جدا می شوند.

[معنا، معنی، ....]

معنی

مقدار می تواند: شی، آرایه، مقدار تحت اللفظی (رشته، عدد، درست است، واقعی, نادرست, خالی).

برای ایجاد فایل JSON به هیچ چیز دیگری نیاز ندارید!

نمونه فایل JSON

یک مثال ساده از ساختار منو. این شی شامل ویژگی ها و آرایه ای است که شامل سایر اشیاء نوار منو می باشد.

( "منو": "پرونده"، "فرمان‌ها": [ ( "عنوان": "جدید"، "عمل": "CreateDoc")، ( "عنوان": "باز"، "عمل": "OpenDoc")، ( "عنوان": "بستن"، "عمل": "CloseDoc") ] ) معادل XML: فایل جدید CreateDoc باز کردن OpenDoc بستن CloseDoc

نحوه استفاده از فرمت

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

بخش مشتری (مرورگر)

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

بخش سرور

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

تبادل اطلاعات
  • با استفاده از XMLHttpRequest.

فایل JSON توسط یک تابع جاوا اسکریپت پردازش می شود eval(). ارسال یک فایل به سرور را می توان با استفاده از XMLHttpRequest انجام داد. فایل به صورت یک فایل متنی ارسال می شود و توسط تجزیه کننده زبان برنامه نویسی مورد استفاده در سرور پردازش می شود.

مثال

کد XMLHttpRequest:

Var req = new XMLHttpRequest(); req.open("GET"، "file.json"، true); req.onreadystatechange = myCode; // کنترل کننده req.send(null);

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

تابع myCode() ( if (req.readyState == 4) ( var doc = eval("(" + req.responseText + ")"); ) ) استفاده از داده: var menuName = document.getElementById("jsmenu"); // فیلد را جستجو کنید menuName.value = doc.menu.value; // یک مقدار به یک فیلد اختصاص دهید نحوه دریافت داده: doc.commands.title // خواندن مقدار فیلد "title" در آرایه doc.commands.action // خواندن مقدار "عمل" در قسمت آرایه

درسی که بررسی می کند JSON چیست و چگونه نسبت به سایر فرمت های داده برتری دارد.

مفهوم JSON

JSON (JavaScript Object Notation) یک قالب متنی برای نمایش داده ها در نمادگذاری شی جاوا اسکریپت است.

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

JSON معمولاً همراه با AJAX استفاده می‌شود تا سرور بتواند داده‌ها را به شکلی مناسب به یک اسکریپت جاوا اسکریپت منتقل کند و سپس آن را در صفحه نمایش دهد.

ساختار فرمت JSON

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

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

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

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

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

Var person = ( نام: "Ivan"; ) // شی جاوا اسکریپت

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

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

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

Var person = ( "name" : "Ivan"; "setName": function() (consol.log(this.name); )) // شی جاوا اسکریپت

برای جدا کردن یک عنصر (جفت کلید-مقدار) از عنصر دیگر، از کاراکتر کاما (,) استفاده کنید.

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

توجه: فرمت داده JSON اجازه اظهار نظر در ساختار خود را نمی دهد.

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

برخلاف شی جاوا اسکریپت، JSON یک رشته است.

مثلا:

// برای مثال، متغیر personData حاوی رشته‌ای است که JSON var personData = "("name":"Ivan","age":37,"mother":("name":"Olga","age": 58)،"کودکان":["ماشا"،"ایگور"،"تانیا"],"متاهل": درست"سگ": پوچ)"؛

کار با JSON معمولا در دو جهت انجام می شود:

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

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

    با استفاده از متد ()eval:

    // متغیر person یک شی جاوا اسکریپت است که با اجرای کد JSON (رشته) var person= eval("("+personData+")");

    با استفاده از متد JSON.parse():

    // متغیر person یک شی جاوا اسکریپت است که با تجزیه یک رشته JSON به دست می آید var person = JSON.parse(personData);

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

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

    Var personString = JSON.strigify(person);

    مزایای فرمت JSON

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

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

    با توجه به اینکه این فرمت مزایای بسیار زیادی دارد، نه تنها در جاوا اسکریپت، بلکه در بسیاری از زبان های دیگر مانند C، Ruby، Perl، Python، PHP و غیره نیز مورد استفاده قرار گرفته است.

    مقایسه فرمت های JSON و XML

    فرمت JSON دارای مزایای زیر نسبت به فرمت XML است:

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

    //JSON var personData = "("نام":"ایوان"،"سن":37"مادر":("نام":"اولگا"،"سن":58)،"کودکان":["ماشا" " ""ایگور"""تانیا"]"متاهل": واقعی"سگ": پوچ)"; //شئ جاوا اسکریپت person var person = JSON.parse(personData);

    بیایید به نکات اصلی نگاه کنیم:

    //دریافت مقادیر کلید (ویژگی) نام person.name; شخص["نام"]; //مقادیر نام کلید (خاصیت) واقع در شی مادر person.mother.name را دریافت کنید. //حذف عنصر سن delete(person.age) //افزودن (یا به روز رسانی) کلید (خاصیت) person.eye = "قهوه ای"; //هنگام کار با آرایه ها، باید از روش هایی استفاده کنید که برای کار به طور خاص با آرایه ها طراحی شده اند. ) person.children. push("Katya");

    برای تکرار در میان عناصر موجود در یک شی، می توانید از حلقه for..in استفاده کنید:

    برای (کلید حضوری) ( if (person.hasOwnProperty(key)) ( //key = کلید //value = person console.log ("Key = " + key); console.log ("Value = " + person) ; ) // اگر شی شخص دارای کلید باشد (اگر شخص دارای ویژگی کلیدی باشد) ) // از طریق تمام کلیدها (خواص) در شیء تکرار شود

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

    برای (var i=0; i

    بهترین مقالات در این زمینه