سلام
به سایت 4xmen خوش آمدید بازم باعث افتخار منه که پیش عزیزان دیگه این سایت دارم فعالیت می کنم.
بحث پیش روی امروز استفاده از JSON هستش، اول از همه بهتر هستش ما ماهیت اطلاعات فرآوری شده رو بررسی کنیم ، زمانی فرارسید که برنامه نویسان زبان های مختلف قصد این رو کردن اطلاعات رو ما بین زبان های هم دیگر رد بدل کنند و این به یه دغدغه تبدیل شد ، برای این کار باید به برنامه خوب و یک استاندارد تعریف میشد، که همه به اون استناد کنند و بتونن اطلاعات رو جا به جا کنند، خب معروف ترین و پر مصرف ترین این استاندراد ها XML هستش که همه ی شما با اون آشنایی دارید و حداقل یک بار اونو دیدید.
اما Javascript چون یه زبان اسکریپت نویسی هستش و مستقل برای خودش عمل نمی کنه یعنی سمت کلاینت (کاربر) هستش برای همین نیاز شدیدی داره که با زبان های سمت سرور ارتباط برقرار کنه از همین رو یه استاندارد جدید هم عرضه شد به نام JSON تعریف JSON طبق اونچه سایت مرجعش نوشته:
جيسان يا JSON (JavaScript Object Notation) يك فرمت تبادل داده سبك (lightweight) ميباشد كه خواندن و نوشتن آن براي انسان و توليد و پارس كردن آن براي ماشينها آسان است. اين زبان بر مبناي يك زير مجموعه از زبان برنامهنويسي JavaScript ، استاندارد ECMA-262 ويرايش سوم – دسامبر 1999، است. 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 با { (آكولاد باز) شروع، و با } (آكولاد بسته) تمام ميشود. در انتهاي هر نام يك : (دو نقطه) قرار ميگيرد و زوجهاي نام/ارزش با , (ويرگول) جدا ميشوند.
يك array يك مجموعه (collection) منظم از ارزش > (value) ها است. يك array با [ (براكت باز) شروع، و با > ] (براكت بسته) تمام ميشود. ارزشها توسط , (ويرگول) از هم جدا ميشوند.
يك value ميتواند يك رشته (string) داخل “ ، يا يك عدد ، يا true يا false يا null ، يا يك object يا يك array باشد. اين ساختارها ميتوانند تو در تو باشند.
خب این توضحاتش بودش برای توضحات تکمیلی به این آدرس مراجعه کنید.
اما چطور از 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 خودتون رو بنویسید:
اول از همه کوچک ترین عضو مجموعه 4xmen بنده حقیر هستم.
در ثانی یک توسعه دهنده هستم زمینه های تخصصی کارم :
Delphi, Rust ,PHP, C++ ,Python, JavaScript, Unity game engine, C#, asm
و علاقه مند به لینوکس، RCE ، کریپتوگرافی هستم.
تا الان حضرت حق اینا رو به ما داده و هر وقت که بخواد ازمون میگیره دست خودشه.
یا حق، با حق، تا حق




دیدگاهتان را بنویسید لغو پاسخ