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

JSON چیست و نحوه استفاده آن در دلفی Delphi و پی اچ پی PHP

سلام

به سایت 4xmen خوش آمدید بازم باعث افتخار منه که پیش عزیزان دیگه این سایت دارم فعالیت می کنم.

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

اما Javascript چون یه زبان اسکریپت نویسی هستش و مستقل برای خودش عمل نمی کنه یعنی سمت کلاینت (کاربر) هستش برای همین نیاز شدیدی داره که با زبان های سمت سرور ارتباط برقرار کنه از همین رو یه استاندارد جدید هم عرضه شد به نام JSON تعریف JSON طبق اونچه سایت مرجعش نوشته:

جی‌سان یا JSON (JavaScript Object Notation) یک فرمت تبادل داده سبک (lightweight) می‌باشد که خواندن و نوشتن آن برای انسان و تولید و پارس کردن آن برای ماشین‌ها آسان است. این زبان بر مبنای یک زیر مجموعه از زبان برنامه‌نویسی JavaScript ، استاندارد ECMA-262 ویرایش سوم – دسامبر ۱۹۹۹‌، است. JSON بصورت متنی (text) بوده و کاملاً مستقل از زبان بکار رفته است، اما از قوانینی استفاده می‌کند که برای برنامه‌نویسان زبان‌های خانواده C (شامل C ، C++ ، Java ، JavaScript ، Perl ، Python ، و بسیاری زبان‌های دیگر) آشنا می‌باشد.‌ این خصوصیات JSON را یک زبان تبادل‌داده‌ای ایده‌آل کرده است.

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

  • یک مجموعه از زوج‌های نام/ارزش (name/value). در زبان‌های گوناگون این ساختار یک شیء (object) ، ساختار (struct) ، دیکشنری (dictionary) ، جدول مخلوط (hash table) ، لیست کلیددار (keyed list) یا آرایه انجمنی (associative array) شناخته می‌شود. • یک لیست منظم از ارزش‌ها. در بسیاری از زبان‌ها این ساختار یک آرایه ( array) ، بردار (vector) ، لیست (list) ، یا دنباله (sequence) شناخته می‌شود.
  • اینها ساختار داده‌های عمومی هستند. همه زبان‌های برنامه‌نویسی مدرن یکی از آنها را پشتیبانی می‌کنند. منطقی است که یک فرمت داده قابل استفاده توسط زبان‌های برنامه‌نویسی مختلف بر مبنای این ساختارها باشد.

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

یک شیء (object) یک مجموعه نامنظم از زوج‌های نام/ارزش است. یک object‌ با { (آکولاد باز) شروع، و با } (آکولاد بسته) تمام می‌شود. در انتهای هر نام یک : (دو نقطه) قرار می‌گیرد و زوج‌های نام/ارزش با , (ویرگول) جدا می‌شوند.

object (1)

 

یک array یک مجموعه (collection) منظم از ارزش‌ > (value) ها است. یک array با [ (براکت باز) شروع، و با > ] (براکت بسته) تمام می‌شود. ارزش‌ها توسط , (ویرگول) از هم جدا می‌شوند.

array

 

یک value می‌تواند یک رشته (string) داخل  ، یا یک عدد ، یا true یا false یا null ، یا یک object یا یک array باشد. این ساختارها می‌توانند تو در تو باشند.

value

 

خب این توضحاتش بودش برای توضحات تکمیلی به این آدرس مراجعه کنید.

اما چطور از JSON استفاده کنیم.

PHP

ابتدا در مورد PHP توضیح میدیم چون هم ساده تر هستش و هم Open Source هستش.

در php استفاده JSON بسیار ساده هستش چون PHP از associative array پشتیبانی کامل داره حالا شاید براتون سوال بشه associative array چیست به زبان ساده تو یک جمله بخوایم توضیح بدیم این هستش که در آرایه های php در key ها ما فقط مجبور به استفاده از عدد نیستیم و به سادگی میتونیم حتی string هم به عنوان کلید آرایه در نظر بگیریم و حالا برای استفاده از JSON زمانی که ما آرایه ای رو می خوایم به رشته تبدیل کنیم و JSON کنیم به سادگی به یه خط کد امکان پذیر هستش برای مثال:

<?php

	$arr = array();
	$arr['key1'] = 'hello' ;
	$arr['key2'] = 'world';
	$arr['key3'] = array();
	$arr['key3'][1] = 'test' ;
	$arr['key3'][2] = true ;
	$arr['key4'] = 12 ;

	echo json_encode($arr);
?>

خب کد بالا اول ما آرایه رو تعریف می کنیم و بعد با تابع  json_encode در پاسخ به ما :

{"key1":"hello","key2":"world","key3":{"1":"test","2":true},"key4":12}

رو میده و برعکس تبدیل string json به برعکس با تابع json_decode به شکل زیر :

<?php

	$str = '{"key1":"hello","key2":"world","key3":{"1":"test","2":true},"key4":12}' ;
	print_r( json_decode($str) );
?>

ونتیجه مانند زیر میشه :

stdClass Object ( [key1] => hello [key2] => world [key3] => stdClass Object ( [1] => test [2] => 1 ) [key4] => 12 )

 

Delphi

حالا نوبتی هم باشه نبوت به دلفی میرسه در دلفی با وجود عدم پشتیبانی از آرایه های associative به صورت مستقیم و عدم پشتیبانی مستقیم از کتابخانه استفاده کنیم از کتابخانه های زیادی من خودم استفاده کردم از جمله superObject و dwsJSON که یکی از یکی پر درد سر تر بودند و عمر ما تلف شد تا به نتیجه فعلی برسیم که کتابخانه ایده آل چیست و اون رو معرفی می کنیم خدمتتون:

کتباخانه LkJSON کتابخانه فوق العاده ای هستش که روی تمام ورژن های دلفی هم جواب میده و برای دانلود یا سرچ کنید و یا به آخر همین نوشته مراجعه کنید این نوشته در زمان نسخه   LkJSON v1.07 این کتابخانه و Delphi XE5 نگاشته شده است و برای استفاده از این به شکل ساده از مثال های خودش استفاده می کنیم برای تبدیل سری متغییر ها به JSON این روش کار سازه البته با فراخونی کتابخانه دانلود شده :

var
  js:TlkJSONobject;
  ws: TlkJSONstring;
  s: String;
  i: Integer;
begin
  js := TlkJSONobject.Create;
//  js.add('namestring', TlkJSONstring.Generate('namevalue'));
  js.Add('namestring','namevalue');
// get the text of object
  s := TlkJSON.GenerateText(js);
  writeln(s);
  writeln;
  writeln('more readable variant:');
// (ver 1.03+) generate readable text
  i := 0;
  s := GenerateReadableText(js,i);
  writeln(s);

  js.Free;
// restore object (parse text)
  js := TlkJSON.ParseText(s) as TlkJSONobject;
// and get string back
// old syntax
  ws := js.Field['namestring'] as TlkJSONstring;
  s := ws.Value;
  writeln(s);
// syntax of 0.99+
  s := js.getString('namestring');
  writeln(s);

  readln;
  js.Free;
end.

روند کار کد مشخص هستش ما از کلاس TlkJSONobject  یک نسخه می سازیم و سپس با تابع add خانه بهش اضافه می کنیم، و کد ها کامنت دارند و کاملا مشخص هستند واما برای برعکس این ماجرا نیاز هستش شما به کد زیر توجه کنید:

 

var
  js,xs:TlkJSONobject;
  ws: TlkJSONstring;
  s: String;
  i: Integer;
begin
  s := '{"string1":"123","string2":"two",'+
    '"childobject":{"objstr1":"Oone","objstr2":"Otwo"}}';
  writeln(s);
// restore object (parse text)
  js := TlkJSON.ParseText(s) as TlkJSONobject;
  writeln('parent self-type name: ',js.SelfTypeName);
// how to obtain type of child
  if not assigned(js) then
    begin
      writeln('error: xs not assigned!');
      readln;
      exit;
    end
  else
    begin
      if js.Field['childobject'] is TlkJSONnumber then writeln('type: xs is number!');
      if js.Field['childobject'] is TlkJSONstring then writeln('type: xs is string!');
      if js.Field['childobject'] is TlkJSONboolean then writeln('type: xs is boolean!');
      if js.Field['childobject'] is TlkJSONnull then writeln('type: xs is null!');
      if js.Field['childobject'] is TlkJSONlist then writeln('type: xs is list!');
      if js.Field['childobject'] is TlkJSONobject then writeln('type: xs is object!');
    end;
// the other way (0.93+)
  case js.Field['childobject'].SelfType of
    jsBase : writeln('other type: xs is base');
    jsNumber : writeln('other type: xs is number');
    jsString : writeln('other type: xs is string');
    jsBoolean : writeln('other type: xs is boolean');
    jsNull : writeln('other type: xs is null');
    jsList : writeln('other type: xs is list');
    jsObject : writeln('other type: xs is object');
  end;
  writeln('self-type name: ',js.Field['childobject'].SelfTypeName);
// and get string back
  xs := js.Field['childobject'] as TlkJSONobject;
// we know what xs chilren are strings
  ws := xs.Field['objstr1'] as TlkJSONstring;
  writeln(ws.value);
  ws := xs.Field['objstr2'] as TlkJSONstring;
  writeln(ws.value);
// new v0.99+ syntax!
  writeln(xs.getString('objstr1'));
  writeln(xs.getString('objstr2'));
// for 1.04+ syntax
  s := vartostr(js.Field['childobject'].Field['objstr1'].Value);
  writeln(s);
  s := vartostr(js.Field['childobject'].Field['objstr2'].Value);
  writeln(s);
//
  readln;
  js.Free;
end.

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

  js := TlkJSON.ParseText(s) as TlkJSONobject;

اون رو آماده می کنیم و با روش زیر خانه های آن رو بدست میاریم و داخل یک متغییر از نوع TlkJSONstring میریزم تا قابل نمایش باشه:

ws := xs.Field['objstr2'] as TlkJSONstring;

به همین سادگی و به همین خوشمزگی متونید نمایشش بدین:

writeln(ws.value);

خب امیدوارم که بار دیگر 4xmen تنوسته باشه به شما کمک کنه فایل هاش رو دانلود کنید و اولین مثال JSON خودتون رو بنویسید:

lkJSON-1.07


انتشار

در

, ,

توسط

برچسب‌ها:

نظرات

5 پاسخ به “JSON چیست و نحوه استفاده آن در دلفی Delphi و پی اچ پی PHP”
  1. HamiD نیم‌رخ

    خیلی کارخوبی کردی که دلفی و php رو جفت باهم گفتی :دی

    1. Mahdiam نیم‌رخ
      Mahdiam

      C# and ASP.net باشه Delphi با PHP میشه دیگه 😀

  2. مهدي كريم پور نیم‌رخ
    مهدي كريم پور

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

    با تشکر

  3. سعیدرجایی نیم‌رخ
    سعیدرجایی

    {
    “Id”: “1”,
    “Name”: “پودر ماشین لباسشویی طلایی”,
    “CategoryId”: “1”,
    “Asset”: “300”,
    “Price”: “6500”,
    “CustomerPrice”: “6300”,
    “Tags”: “پودر،لباسشویی،پاکشوما”,
    “InBox”: “12”,
    “Code”: “456231”,
    “Image”: “p1.png”,
    “Min”: “20”,
    “IsDelete”: “0”
    },
    {
    “Id”: “2”,
    “Name”: “پودر دستی ۲۰۰ گرمی”,
    “CategoryId”: “1”,
    “Asset”: “450”,
    “Price”: “5300”,
    “CustomerPrice”: “5000”,
    “Tags”: “پودر،دستی”,
    “InBox”: “12”,
    “Code”: “456232”,
    “Image”: “p2.png”,
    “Min”: “24”,
    “IsDelete”: “0”
    },
    {
    “Id”: “3”,
    “Name”: “مایع دستشویی کوچک”,
    “CategoryId”: “1”,
    “Asset”: “200”,
    “Price”: “7200”,
    “CustomerPrice”: “7100”,
    “Tags”: “مایع،دستشویی”,
    “InBox”: “6”,
    “Code”: “456233”,
    “Image”: “p3.png”,
    “Min”: “12”,
    “IsDelete”: “0”
    },
    {
    “Id”: “4”,
    “Name”: “همبرگر ۶۰ درصد ۵ عددی”,
    “CategoryId”: “2”,
    “Asset”: “140”,
    “Price”: “9500”,
    “CustomerPrice”: “9200”,
    “Tags”: “همبرگر،کاله”,
    “InBox”: “10”,
    “Code”: “300150”,
    “Image”: “p4.png”,
    “Min”: “10”,
    “IsDelete”: “0”
    },
    {
    “Id”: “5”,
    “Name”: “بستنی ۱ لیتری وانیلی”,
    “CategoryId”: “2”,
    “Asset”: “500”,
    “Price”: “4200”,
    “CustomerPrice”: “4000”,
    “Tags”: “بستنی،بزن،کاله”,
    “InBox”: “6”,
    “Code”: “300151”,
    “Image”: “p5.png”,
    “Min”: “6”,
    “IsDelete”: “0”
    },
    {
    “Id”: “6”,
    “Name”: “پفک موتوری بزرگ”,
    “CategoryId”: “3”,
    “Asset”: “200”,
    “Price”: “2000”,
    “CustomerPrice”: “1800”,
    “Tags”: “پفک،موتوری،چی توز”,
    “InBox”: “6”,
    “Code”: “300152”,
    “Image”: “p6.png”,
    “Min”: “7”,
    “IsDelete”: “0”
    },
    {
    “Id”: “7”,
    “Name”: “چیپس سرکه ای”,
    “CategoryId”: “3”,
    “Asset”: “300”,
    “Price”: “2200”,
    “CustomerPrice”: “2000”,
    “Tags”: “چیپس”,
    “InBox”: “12”,
    “Code”: “300153”,
    “Image”: “p7.png”,
    “Min”: “1”,
    “IsDelete”: “0”
    }
    من همچین مجموعه ای دارم چگونه پیمایش کنم در دلفی برای خواندن آن

  4. ابرهیم قائمی نیم‌رخ

    سلام ممنون فقط کاربردش رو هم بزارید خیلی خوب میشه مخصوصا API

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *