وباکا

آموزش تخصصی برنامه نویسی وب

آشنایی با قالب JSON

JSON و یا به عبارتی دیگر JavaScript Object Notation یک قالب قابل خواندن برای ساختار بندی ، ذخیره و تبادل داده ها می باشد.

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

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

همچنین می توانیم هر داده ای به فرمت JSON را که از سرور دریافت کرده ایم به object ایی در JavaScript تبدیل کنیم. اکثر زبان های برنامه نویسی از جمله جاوا، جاوااسکریپت و php ، دستوراتی برای تبدیل اطلاعات به فرمت JSON یا تفسیر اطلاعات با قالب JSON و تبدیل آن به اشیا را دارند.

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

مثال 1 : برای نگهداری یک داده به فرمت JSON می نویسیم:
{"name":"ali" }
نمونه مثال بالا مشخص میکند که داده “john” یک نام است.

مثال 2: برای نگهداری اطلاعات یک شیء به فرمت JSON می نویسیم:
{"name":"ali", "age":20, "city":"tehran"}

مثال 3: برای نگهداری یک آرایه از اشیا بصورت زیر از فرمت JSON می نویسیم:

[{ "name":"ali" , "age":20, "city":"tehran"},
{ "name":"sara", "age":17, "city":"yazd"},
{ "name":"mina", "age":21, "city":"birjand"} ]

همچنین هر کدام از ویژگی های شی JSON می توانند خود حاوی یک شیء دیگر یا آرایه ای از اشیا باشند. به مثال زیر دقت کنید که یک شیء دارای ویژگی count و data داریم که ویژگی data خود یک آرایه از اشیا می باشد:


{"count":"3", "data":[
{ "name":"ali" , "age":20, "city":"tehran"},
{ "name":"sara", "age":17, "city":"yazd"},
{ "name":"mina", "age":21, "city":"birjand"}
]
}

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

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

در برنامه نویسی اندروید با استفاده از چند کلاس از پیش تعریف شده با JSON کار می شود:

کلاس JSONObject

با استفاده از این کلاس می توان یک شیء جی سان تعریف کرده و ویژگی ها را به آن اضافه کرد و همچنین می توان شیء جی سان را بصورت رشته تبدیل نمود. به عنوان مثال برای ایجاد یک شیء جی سان زیر
{"name":"ali", "age":20, "city":"tehran"}
دستورات زیر را می نویسیم:

JSONObject json = new JSONObject();
json.put("name","ali");
json.put("age","20");
json.put("city","tehran");

توجه داشته باشید که برای اجرای صحیح و بدون خطای این دستورات باید از ساختار try..catch بصورت زیر استفاده کنیم.

JSONObject json = new JSONObject();
try{
json.put("name","ali");
json.put("age","20");
json.put("city","tehran");
}catch (JSONException e)
{
e.printStackTrace();
}

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

همپنین برای تبدیل شی جی سان به رشته می نویسیم:

String  str=json.toString();

کلاس JSONArray

از کلاس JSONArray برای ایجاد یک آرایه از اشیای جی سان استفاده می شود.

JSONArray list=new JSONArray();
list.put(json1)
list.put(json2);

در دستورات فوق فرض شده است که json1 و json2 اشیای جی سان هستند که از روی کلاس JSONObject ساخته شده اند. این اشیا می توانند به عنوان عناصر به آرایه list اضافه شده و یا می تواند عنصر با اندیس مشخص از آرایه را برداشته و به متغیر نسبت داد:
JSONObject obj=list.get(1);
در دستور فوق عنصر خانه 1 آرایه list به متغیر obj نسبت داده شده است.

تبدیل آرایه رکوردها به فرمت json

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

ArrayList<Person> list=new ArrayList<>();
list.add(new Person("ali",20,"tehran") );
list.add(new Person("sara",17,"yazd") );
list.add(new Person("mina",23,"birjand") );
String str_list;
JSONArray json_list=new JSONArray();
try {
for (int i = 0; i < list.size() ; i++) {
JSONObject rec = new JSONObject();
Person p=list.get(i);
rec.put("name", p.name);
rec.put("age", p.age);
rec.put("city", p.city);
json_list.put(rec);
}
str_list = json_list.toString();

}catch (JSONException e)
{
e.printStackTrace();
str_list=””;
}

در مثال فوق فرض شده است که کلاس Person دارای ویژگی های name ، age و city تعریف شده و یک تابع سازنده دارای سه پارامتر برای مقداردهی اولیه این ویژگی ها می باشد.

class Person{
String name;  int age;  String city;
public Person(String name,int age,String city){}
}

 تبدیل json به آرایه ای از رکوردها

در بخش قبل روش با استفاده از یک مثال، تبدیل آرایه ای از رکوردها به یک رشته با فرمت جی سان نشان داده شد. در این قسمت تبدیل عکس را انجام داده و از یک رشته جی سان، رکوردها را استخراج شده و در آرایه قرار می گیرد. در این مثال هم فرض شده است که یک کلاس مدل Person با ویژگی های name ، age و city وجود دارد.

فرض شده است که متغیر رشته ای json_str رشته جی سان مشابه زیر است:

[{ "name":"ali" , "age":20, "city":"tehran"},
{ "name":"sara", "age":17, "city":"yazd"},
{ "name":"mina", "age":21, "city":"birjand"} ]

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

ArrayList<Person> list=new ArrayList<Person>();
try {
JSONArray json_arr = new JSONArray(json_str);
for (int i = 0; i < json_arr.length(); i++) {
JSONObject c = json_arr.getJSONObject(i);
String name = c.getString("name");
int  age = c.getInt("age");
String city = c.getString("city");
list.add(new Person(name , age, city ));
}
}catch (JSONException e){
Log.e("json",e.getMessage());
}

برای تبدیل رشته جی سان به آرایه، یک شیء از نوع JSONArray ایجاد شده و رشته جی سان به عنوان ورودی به آن داده می شود:
JSONArray json_arr = new JSONArray(json_str);
سپس با استفاده از یک حلقه تکرار هر کدام از عناصر آرایه در یک شیء  JSONObject قرار گرفته و فیلدهای آن جدا شده و در متغیرهای name، age و city  قرار می گیرد. این متغیرها بصورت یک شی Person به آرایه اضافه می شود:

// تبدیل رشته جی سان به آرایه اشیای جی سان
JSONArray json_arr = new JSONArray(json_str);
// پیمایش آرایه اشیای جی سان
for (int i = 0; i < json_arr.length(); i++) {
// ایجاد یک شی جیسون از روی عنصر آرایه
JSONObject c = json_arr.getJSONObject(i);
// جدا کردن فیلدها
String name = c.getString("name");
int  age = c.getInt("age");
String city = c.getString("city");
// ایجاد یک شی شخص و اضافه کردن به لیست اشخاص
list.add(new Person(name , age, city ));
}

توجه داشته باشید که برنامه تبدیل رشته جی سان به رکوردها باید در داخل ساختار try..catch نوشته شود تا چنانچه به علت درس نبودن ساختار جی سان یا علتی دیگر، تبدیل با مشکل مواجه گردد، اجرای دستورات بخش try قطع شده و در بخش catch ، پیغام خطای مناسب نمایش داده شود.

 

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

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

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

فهرست مطالب