خواندن json در برنامه نویسی اندروید
سلام دوستان این دفعه با خواندن json در برنامه نویسی اندروید اومدیم خب بهتره ابتدا json رو معرفی کنم.
جیسن (JSON) ساختاری (فرمت) با استاندارد باز است که در انتقال اطلاعات و دادهها (مثلاً بین مرورگر و سایت) استفاده شده و برای انسان قابل خواندن است.
JSON چیست؟
جیسن (JSON) که برخی جیسان و جیسون نیز تلفظ میکنند، مخفف کلمه JavaScript Object Notation بوده و یک استاندارد باز است که با ساختاری خوانا برای انسان و هم ماشین، میتوان اطلاعات و دادههای مختلف از جمله دادههای یک دیتابیس را با استفاده از آن، بین عوامل مختلف مثلاً مرورگر کاربر و یک سایت منتقل کرد یا در فضای ذخیره سازیای، آن را ذخیره نمود.
یکی از مهمترین کاربردهای JSON، استفاده از آن در تکنولوژی آزاکس (AJAX) است. آژاکس تکنولوژیای است که با استفاده از زبان جاوا اسکریپت، درخواستهایی به سرور وبسایت ارسال میکند و بدون نیاز به تغییر آدرس صفحه یا بارگذاری مجدد آن، تغییراتی را در صفحه ایجاد میکند. به این ترتیب صفحاتی پویا یا داینامیک خواهیم داشت. درست است که در آژاکس همانطور که از نامش (Asynchronous JavaScript and XML) هم پیداست، اطلاعات رد و بدل شده در قالب XML انجام میپذیرد اما از زمان معرفی JSON، قالب مورد استفاده از XML به JSON تغییر داده شد.
به دلیل مزایای جیسن نسبت به ایکسامال، JSON نه تنها در جاوا اسکریپت بلکه در سایر زبانها نیز استفاده میشود. یعنی به عبارت دیگر JSON یک محتوای متنی است که به زبانی وابسته نیست و تقریباً در اکثر زبانها از جمله PHP، C#، C++، C، ASP.NET، Java و بسیاری از زبانهای دیگر قابل تولید و تجزیه سازی و همینطور برای انسان به راحتی قابل نوشتن و خواندن است.
ساختار JSON
ساختار جیسن بسیار ساده است و همین سادگی یکی از دلایل برتری آن نسبت به ایکسامال است چون با این ساختار، خود کاربر و انسان نیز میتواند به راحتی محتوا را بخواند. قواعد کلی یک نوشته بصورت JSON به این شکل است:
محتوای داخل JSON با آکولاد باز } شروع شده و با آکولاد بسته { تمام میشوند. این بلاک به عنوان آبجکت مادر نیز شناخته میشود.
1 2 3 | { آبجکتها، آرایهها و مقادیر } |
آبجکتها
شیء یا آبجکت (Object) در JSON شامل مجموعهای نامرتب از دادهها (نام/مقدار) است که دارای یک نام رشتهای (داخل ” “) به عنوان کلید است. کلید آبجکتها بهتر است منحصر به فرد باشد تا به راحتی قابل تمایز باشند. آبجکتها با آکولاد باز } شروع شده و با آکولاد بسته { تمام میشوند. کلید با کاراکتر دو نقطه : از آکولاد باز جدا میشود. دادههای داخل آبجکت باید با کاراکتر کاما ( , ) از یکدیگر جدا شوند.
برای مثال:
1 2 3 4 5 6 7 | { "Me": { "fname": "mohammadhossein", "lname": "JFp", "birth": "1999" } } |
در مثال بالا ما یک آبجکت با نام کلید Me داریم که دارای خصوصیاتی با مقادیر fname برابر Amirreza و lname برابر Nasiri و birth برابر ۱۹۹۶ است.
آرایهها
آرایه یا Array در JSON میتواند شامل چندین مقدار (از یک نوع ارزش) باشد. آرایهها معمولاً دارای یک نام رشتهای (داخل ” “) به عنوان کلید است. کلید آرایهها بهتر است منحصر به فرد باشد تا به راحتی قابل تمایز باشند. آرایهها با براکت باز ] شروع شده و با براکت بسته [ تمام میشوند. کلید با کاراکتر دو نقطه : از براکت باز جدا میشود. آبجکتهای داخل آرایه باید با کاراکتر کاما ( , ) از یکدیگر جدا شوند.
برای مثال: آرایهای از آبجکتها (ارزش)
1 2 3 4 5 6 7 | { "Persons": [ {"fname": "Amirreza", "lname": "Nasiri"}, {"fname": "Alireza", "lname": "Nasiri"}, {"fname": "Navid", "lname": "Mousavi"} ] } |
در این مثال ما یک آرایه به نام Persons داریم که دارای سه آبجکت است. هر آبجکت نیز دو جفت نام/مقدار دارد.
نمونه دیگر: آرایهای از یک نوع مقادیر (ارزش)
1 2 3 4 5 | { "Ages": [ ۲۵, ۱۲, ۶۵, ۱۶ ] } |
نکته: آرایه فقط میتواند شامل یک نوع ارزش باشد. برای مثال یا همه آیتمهایش آبجکت باشد یا رشته یا … .
ارزشها
ارزش یا Value شامل موارد زیر است:
- رشتهها
- اعداد
- آبجکتی دیگر
- آرایهای دیگر
- مقدار بولی – درست یا غلط (True / False)
- مقدار تهی (Null)
به نظرم به مقدار کافی بخش json یا جی سون یا جی سن را توضیح دادم.
خب ابتدا باید دو کتاب خانه volley و http رو برای برقراری ارتباط با بیرون از برنامه (اینترنت) در بخش build gradle level اضافه کنیم که به شکل زیر است.
1 2 | compile 'com.android.volley:volley:1.0.0' compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2' |
سپس دکمه sync را فشرده و منتظر به اصطلاح دانلود شدن متد ها بمانید (در صورتی که در sync شدن برنامه مشکل دارید این مطلب را مطالعه کنید).
سپس به بخش AndroidManifest رفته و دسترسی یا Permission های زیر را اضافه کنید این دسترسی ها برای اتصال به اینترنت لازم است.
1 | <uses-permission android:name="android.permission.INTERNET" /> |
پس از آن اکتیویتی که ساخته اید باز کرده و کد های زیر را در آن قرار دهید تمامی بخش ها به صورت کامل توضیج داده خواهد شد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | import android.content.Context; import android.content.Entity; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.android.volley.toolbox.HttpClientStack; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; public class MainActivity extends AppCompatActivity { HttpResponse response; String str; JSONObject json=null; String id,email,name; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { new Getdatafromdatabase(MainActivity.this).execute(); } catch (Exception e) { } } private class Getdatafromdatabase extends AsyncTask<Void, Void, Void> { public Context context; public Getdatafromdatabase(Context context) { this.context = context; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected Void doInBackground(Void... arg0) { HttpClient myClient = new DefaultHttpClient(); HttpPost myConnection = new HttpPost("http://studioapk.ir/bebinobego/send-data.php"); try { response = myClient.execute(myConnection); str = EntityUtils.toString(response.getEntity(), "UTF-8"); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { JSONArray jArray = new JSONArray(str); json = jArray.getJSONObject(1); } catch (JSONException e) { e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } protected void onPostExecute(Void result) { try { id = json.getString("id"); email = json.getString("email"); name = json.getString("name"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } |
کد بالا رو ما متغیر هایی از نوع JSONObject و HttpResponse داریم متغیر اولی برای بازکردن json و موشکافی دیتا هایی که از طریق httprepsonse هستن به کار می رود همان طور که میبینید ما با استفاده از httpresponse دیتا رو دریافت کردیم و برای دستیابی به اطلاعات json یک jsonarray در نظر گرفتیم و این رو بگم همینطور که در بالا json تعریف شد ما دونوع دیتا از جی سون داریم و دریافت هرکدام از آنها فرق دارد ما بخش ارایه را در حال توضیح دادن هستیم و علت استفاده از utf-8 پشتیبانی کردن دیتای دریافت شده از زبان فارسی است اگر قرار گرفته نشود حروف و کارکتر های به صورت ناخوانا در میایند. و با استفاده از دستور new Getdatafromdatabase(MainActivity.this).execute(); دیتا دریافت شده و در سه متغییر email و id و name قرار میگیرند و قابل استفاده خواهند بود.
انشاالله مفید واقع شده باشد.
4 پاسخ به “خواندن json در برنامه نویسی اندروید”