تکین وب | آموزش برنامه نویسی
تکین وب | آموزش برنامه نویسی

مفهوم و کاربرد JSON

دسته بندی : آموزش Java, آموزش PHP
۷ تیر ۱۳۹۵

در یک تعریف کلی JSON را می توان یک فرمت نمایشی نامید که کدهای آن برای انسان ناخوانا ولی برای کامپیوتر خوانا است!

ما در پست های قبلی نحوه ی بدست آوردن سورس نمایشی یک سایت در اپلیکیشن های اندرویدی را آموختیم حال اگر بخواهیم قسمتی از این کد ها را در برنامه اندرویدی خود استفاده کنیم به الگوریتم بسیار بسیار پیچیده ای نیاز داریم زیرا برای یافتن یک قطعه کد بین کدهای گوناگون با وجود کاراکترهای گوناگون از قبیل فاصله و … کار بسیار دشواری را در پیش داریم و مسلما هزینه بسیار بالایی را نیز باید صرف این کار کنیم!

روش JSON برای حل چنین مشکلی بسیار کارآمد است! در واقع ما با روش JSON کد های خود را encode میکنیم.

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

و همچنین اگر کد های خود را از حالت ناخوانا برای انسان به حالت خوانا برای انسان تبدیل کنیم، عمل decode کردن را انجام داده ایم.

هچنین در یک تعریف دقیق تر از JSON میتوان گفت، JSON یک فرمت استاندارد برای سریالایز کردن داده ها می باشد.( JSON Serializer )

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

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

برای مثال ما یک آرایه ای به زبان php را با روش JSON به زبان برنامه نویسی جاوا تبدیل میکنیم:

$array[]=array(
    "Heloo"=>5,
    "takinweb"=>"My Site",
    ۳۲۵۵۴=>"abcd",
    ۲۳۴۲۴=>array(
        "A"=>"B",
        ۴=>45),
    "another name"=>sdfsfd);
print_r($array);

در مثال بالا یک آرایه ای تو در تو تعریف شده است و با دستور print_r می توانیم این آرایه را در مرورگر خود مشاهده کنیم!

آرایه مورد نظر ما به این شکل قابل مشاهده است:

Array ( [0] => Array ( [Heloo] => 5 [takinweb] => My Site [32554] => abcd [23424] => Array ( [A] => B [4] => 45 ) [another name] => sdfsfd ) )

حال با این کد میتوانیم آرایه مورد نظر را به فرمت JSON تبدیل کنیم:

echo json_encode($array);

که کد نهایی ما به این صورت می باشد:

$array[]=array(
    "Heloo"=>5,
    "takinweb"=>"My Site",
    ۳۲۵۵۴=>"abcd",
    ۲۳۴۲۴=>array(
        "A"=>"B",
        ۴=>45),
    "another name"=>sdfsfd);
print_r($array);
echo "  ";
echo json_encode($array);

خروجی این قطعه کد به دو صورت نمایش داده می شود،نمایش اول مربوط به کد print_r بوده و نمایش دوم به فرمت JSON خواهد بود.

Array ( [0] => Array ( [Heloo] => 5 [takinweb] => My Site [32554] => abcd [23424] => Array ( [A] => B [4] => 45 ) [another name] => sdfsfd ) )
[{“Heloo”:5,”takinweb”:”My Site”,”32554″:”abcd”,”23424″:{“A”:”B”,”4″:45},”another name”:”sdfsfd”}]

همانطور که میبینید در فرمت JSON داده ها به صورت به هم چسبیده و درون کروشه ها و براکت هایی به نمایش در می آیند

تا اینجای کار ما کد مورد نظر خود، در محیط php را به فرمت JSON تبدیل کردیم و حال بایستی این فرمت را در محیط جاوا مورد استفاده قرار دهیم
در پست مربوط به دریافت سورس نمایشی یک سایت که پیش مقدمه ای برای این آموزش بود سورس سایت مورد نظر که حاوی فرمت JSON نیز می باشد وارد محیط برنامه نویسی جاوا میکنیم:

توجه داشته باشد که ما برای استفاده از JSON باید فرمت های دیگر استفاده شده در سورس سایت خود را حذف کنیم و سورس صفحه ما حاوی یک فرمت JSON خالص باشد. در مثال بالا سورس صفحه ما دارای JSON خالص نیست و بایستی دستور print_r را از دستورات خود حذف کنیم.

در کد مربوط به دریافت سورس نمایشی یک سایت ،محتویات سایت را در یک متغیری به نام result که از جنس String بود قرار دادیم و حال تغییراتی در کد قبلی می دهیم که بتوانیم از فرمت JSON نیز استفاده کنیم

 

public class SourceActivity extends Activity{
@override
public void oncreate(bundle savedInstancestate){
super.oncreate(savedInstancestate);
setcontentview(R.Layout.main);
DefaultHttpClient client = new DefaultHttpClient();
HttpPost method=new HttpPost("http://takinweb.com");
try{
client.execute(method);
HttpResponse response = client.execute(method);
int code = response.getstatusLine().getstatuscode();
Inputstream stream = response.getEntity().getcontent();
string result = inputstreamTostring(stream);
log.i("Log" , "result:" + result);
JSONObject object=new JSONObject(result);
object.getInt("heloo");
log.i("Log" , "Value:" + Value);
}
      catch(ClientProtocolExeption e){
    e.printstackTrace();
}
         catch(IDExeption){
    e.printstackTrace();
}
catch(JSONException e){
    e.printstackTrace();
}

   private String inputstreamToString(InputStream inputStream) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        StringBuilder builder = new StringBuilder();
        try {
            String line;
            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }
            return builder.toString();
        }
        catch (Exception e) {
        e.printStackTrace();
    }
        return "";
    }
}

درون دستور try ما بخشی را اضافه کردیم و اگر این دستور به درستی اجرا نشد بخش catch آن اجرا خواهد شد (پس تغییرات صورت گرفته نسبت به کد قبلی افزودن یک به بخش به قسمت try و catch کد قبلی بود)

هر آرایه از دو قسمت key (کلید) و value (ارزش) تشکیل شده است. اگر آرایه ما کلید های از جنس String داشت و یا کلید های آنها مقادیر مرتبی نداشت در آن صورت ما با یک Object سر و کار داریم و در این حالت فرمت JSON درون یک کروشه قرار میگیرد
ولی اگر داخل کلید های آرایه هیچ String ای قرار نگیردو مقدار عناصز آن به ترتیب باشد با یک JSONArray سر و کار داریم و فرمت JSON درون یک براکت قرار میگیرد

در کد بالا ابتدا یک object از JSONObject می سازیم و سپس مقدار کلیدی که حاوی “Heloo” می باشد را به دست می آوریم! یعنی مقدار value کلید Heloo را به دست می آوریم:

JSONObject object=new JSONObject(result);
object.getInt("heloo");
log.i("Log" , "Value:" + Value);

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

در ضمن اگر اینستاگرامی هستید حتما @Takinweb را فالو کنید….

درباره ی کمال قره جه لو

دیدگاه ها

دیدگاه خود را به ما بگویید.

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