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

تولید و تجزیه داده های JSON در PHP. نمای داده JSON

تابع getData (id) ($ .ajax ((url: "some url"، crossDomain: true، type: "post"، داده: (id: id)، موفقیت: function (data) (var json = jQuery.parseJSON ( داده)؛ هشدار (داده)؛))؛

$ name، "clubID" => $ clubID، "lID" => $ lID، "sName" => $ sName، "description" => $ desc)); echo $ json; ?>

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

ID $ را در PHP خود تکرار نکنید. از ویژگی jQuery dataType ajax استفاده کنید و آن را روی json قرار دهید. از تجزیه کننده پیش فرض javascript json استفاده کنید.

سعی کنید به json اعلان کنید نه دیتا؟

جاوا اسکریپت یک شی را برمی گرداند زیرا شما در واقع به شی اخطار می دهید. هشدار (data.name) را امتحان کنید.

یا هشدار (data.clubID)؛ ، این کار خواهد کرد.

باید نوع داده مورد نظر خود را مشخص کنید درخواست ajaxدر غیر این صورت jQuery به طور هوشمند بر اساس نوع MIME تشخیص می دهد. اگر تماس ajax داده‌های json را دریافت کند، مانند آن از آن استفاده می‌کند شی جاوا اسکریپتبنابراین شما این هشدار را دریافت می کنید.

درست است.

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

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

آن را در عمل با یک مثال اساسی ببینید:

// $ _POST ["id"] = "" OR 1 "" $ result = mysql_query ("انتخاب * از عضو باشگاه WHERE clubID = ". $ ID." "");

درخواست شما در حال حاضر

انتخاب * از عضو باشگاه WHERE clubID = "" OR 1 ""

چون 1 همیشه درست است، حالا می توانم کل میز باشگاه شما را بردارم. با درود.

حتی اگر parseJSON یک شی را برگرداند، اجرای console.log باید نشان دهد که کدام یک آرایه از شی است.

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

پس از بررسی سؤالات شما، معتقدم منظور شما را متوجه شدم. آنچه شما انتظار دارید یک شی است (جستجو با با استفاده از SQLهمانطور که گفته شد بسیار ناامن) با 5 ویژگی، نام، شناسه باشگاه، درب، sName و توضیحات. با این حال، به نظر می رسد که شما در حال بازگشت هستید، آیا این چند خط با دو ویژگی است؟
شما می گویید که در حالی که اسکریپت php اکو دارد مقادیر صحیح(یک ردیف)، اما JSON چندین مقدار (/ ردیف) دریافت می کند.
آیا مطمئن هستید که PHP شناسه صحیح را از تماس AJAX دریافت می کند؟

در این مقاله، می خواهم در مورد فرمت تبادل داده متنی - JSON، یعنی در مورد کار با این فرمت در PHP صحبت کنم.

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

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

با وجود منشأ آن از جاوا اسکریپت (به طور دقیق تر، از زیر مجموعه ای از استاندارد ECMA-262 1999)، این فرمت مستقل از زبان در نظر گرفته می شود و تقریباً با هر زبان برنامه نویسی قابل استفاده است. برای بسیاری از زبان ها وجود دارد کد آمادهبرای ایجاد و پردازش داده ها در فرمت JSON.

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

بله، در فناوری AJAX است، به نظر من، کاربرد اصلی آن است. از آنجایی که فناوری AJAX شامل ارسال درخواست مشتری به سرور است. بیشتر در سرور درخواست پردازش می شود و نتیجه در پاسخ به مشتری ارسال می شود.

نمای داده JSON

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

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

("id": "1"، "نام": "ivan"، "کشور": "روسیه"، "دفتر": ["yandex"، "مدیریت"])

بیایید ببینیم این رشته چه چیزی را می تواند منتقل کند: شخصی به نام "ivan"، تحت شناسه "1" که در کشور "روسیه" زندگی می کند، برای شرکت "yandex" در بخش "مدیریت" کار می کند.

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

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

("خطا": "1"، "کد خطا": ["empty_pers"، "empty_mail"، "empty_phone"، "empty_letter"، "empty_scode"])

یعنی مثلا:

  • شما باید فیلد "شخص تماس" را پر کنید
  • باید فیلد «ایمیل» را پر کنید
  • باید فیلد "تلفن" را پر کنید
  • پیام خود را وارد نمایید
  • پر کردن فیلد "شماره در تصویر" الزامی است.

اگر خطایی وجود نداشته باشد، پاسخ برگردانده می شود:

("خطا": "0")

این در مورد ارسال موفقیت آمیز داده ها می گوید.

در PHP از پسوند JSON برای نمایش داده ها در فرمت JSON استفاده می شود. نسخه‌های PHP قدیمی‌تر از 5.2.0 دارای پشتیبانی JSON در هسته هستند نسخه های اولیهباید به اسکریپت شما متصل شود فایل اضافیبا توابع

بنابراین در PHP، دو تابع برای کار با داده ها در فرمت JSON مسئول هستند: json_encode () و json_decode ().

تبدیل داده ها به فرمت JSON

$ json_data = آرایه ("id" => 1، "name" => "ivan"، "country" => "Russia"، "office" => آرایه ("yandex"، "management")); echo json_encode ($ json_data)؛

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

$ json_string = "(" id ": 1," name ":" ivan "," کشور ":" روسیه "," office ": [" yandex "," management "])"; $ obj = json_decode ($ json_string)؛

اکنون $ obj حاوی داده‌های JSON ترجمه شده به یک شی PHP است که می‌توانید به صورت زیر به آن دسترسی داشته باشید:

Echo $ obj-> name; // نام ivan echo $ obj-> office را نمایش می دهد. // نمایش شرکت Yandex

همانطور که می بینید، $ obj-> office یک آرایه است.

Foreach ($ obj-> office به عنوان $ val) echo $ val;

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

JSON (JavaScript Object Notation) فرمتی برای تبادل داده در آن است فرم متن... به شما امکان می دهد ساختارهای داده پیچیده را به صورت سریالی منتقل کنید. این فرمت انتقال داده آنقدر محبوب شده است که از نسخه 5.2.0 توابعی برای پردازش داده ها در این فرمت به هسته PHP اضافه شده است. یعنی نیازی به اتصال نیست پسوندهای اضافی... قالب داده 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 آورده شده است:

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

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

بازیابی داده ها

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

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

  • مختلط json_decode(رشته json [، bool assoc = false [، int depth = 512 [، int options = 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 (عدد صحیح) همه و در \ u0026 کدگذاری شده اند. از 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 برای فراخوانی سیستم باز داخلی (2) است.
"X +" ایجاد می کند و برای خواندن و نوشتن باز می کند. در غیر این صورت رفتاری مشابه "x" دارد.
'C' فایلی را فقط برای نوشتن باز می کند. اگر فایل وجود نداشته باشد، ایجاد می شود. اگر فایل وجود داشته باشد، آن را کوتاه نمی کند (برخلاف 'w')، و فراخوانی این تابع باعث خطا نمی شود (همانطور که در مورد 'x' وجود دارد). نشانگر فایل روی ابتدای فایل تنظیم می شود. اگر می‌خواهید قبل از تغییر، یک فایل را قفل کنید (به flock () مراجعه کنید، می‌تواند مفید باشد، زیرا استفاده از «w» می‌تواند فایل را قبل از به دست آوردن قفل کوتاه کند (اگر می‌خواهید فایل را کوتاه کنید، می‌توانید از ftruncate () بعد از آن استفاده کنید. درخواست قفل).
"C +" فایلی را برای خواندن و نوشتن باز می کند. در غیر این صورت همان رفتار "c" را دارد.

مقالات مرتبط برتر