سبد (0)

آموزش JSON Parser در اندروید

آموزش JSON Parser در اندروید

JSON مخفف JavaScript Object Notation می باشد، که حالتی از تبادل مستقل داده و بهترین جایگزین برای XML  می باشد. این آموزش توضیح می دهد که چگونه یک فایل JSON را تجزیه کرده و اطلاغات لازم را از آن استخراج کنیم.

اندروید چهار گروه مختلف برای اجرای داده ی JSON ارائه می دهد که عبارتند از: JSONArray و JSONObjectو JSONStringer و  JSONTokenizer .

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

 

{
   "sys":
   {
      "country":"GB",
      "sunrise":1381107633,
      "sunset":1381149604
   },
   "weather":[
   {
      "id":711,
      "main":"Smoke",
      "description":"smoke",
      "icon":"50n"
   }
],
"main":
   {
      "temp":304.15,
      "pressure":1009,
   }
}

JSON – عناصر

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

  • Array([)

    در یک فایل JSON کروشه ( [) نشان دهنده ی یک ردیف JSON می باشد.

  • Objects({)

    در یک فایل JSON این علامت (}) نشان دهنده ی یک آبجکت JSON می باشد.

  • Key
    A JSON object contains a key that is just a string. Pairs of key/value make up a JSON object

    یک آبجکت JSON کلیدی است که فقط یک رشته می باشد. جفت های کلید/مقدار(value/key) یک شئ JSON را تشکیل می دهند.

  • Value

    هر کلید دارای مقداری می باشد که می تواند یک رشته، عدد صحیح و غیره باشد.

JSON – تجزیه

برای تجزیه ی شئ JSON یک شئ از کلاس JSONObject ایجاد خواهیم کرد  و یک رشته شامل داده ی JSON برای آن مشخص می کنیم. ترکیب آن مانند زیر می باشد.

 

String in;
JSONObject reader = new JSONObject(in);

آخرین مرحله تجزیه ی  است. یک فایل JSON شامل شئ های مختلف با جفت های مختلف key/value  و غیره می شود. بنابراین JSONObject دارای عملکرد مجزا برای تجزیه ی هر مولفه از فایل JSON می باشد. ترکیب آن به شکل زیر است

 

JSONObject sys  = reader.getJSONObject("sys");
country = sys.getString("country");
            
JSONObject main  = reader.getJSONObject("main");
temperature = main.getString("temp");

متد getJSONObject شئ Json را بر میگرداند. متد getString مقدار رشته ی یک کلید مشخص را بر میگرداند.

علاوه بر این متد ها، متدهای دیگری برای تجزیه ی بهتر JSON توسط این کلاس ارائه می شوند که می توانید در لیست زیر مشاهده کنید

  • get(String name)

    این روش فقط مقدار را بر میگرداند، اما به شکل نوع شئ.

  • getBoolean(String name)

    این متد مقدار Boolean مشخص شده توسط کلید را بر می گرداند.

  • getDouble(String name)

    این روش مقدار مضاعف مشخص شده توسط کلید را بر می گرداند.

  • getInt(String name)

    این روش مقدار صحیح مشخص شده توسط کلید را بر می گرداند.

  • getLong(String name)

    این متد مقدار طولی (long value) مشخص شده توسط کلید را بر می گرداند.

  • length()

    این متد تعداد نگاشت های نام / مقدار (name/value) در این شئ را بر می گرداند.

  • names()

    این متد ردیفی شامل نام رشته ها را بر می گرداند.

مثال

برای اجرای این مثال نیاز به یک دستگاه واقعی یا یک شبیه ساز دارید.

  • برای ایجاد یک برنامه ی اندروید از Eclipse IDE استفاده خواهید کرد و آن را با عنوان JSON  به عنوان بسته ی com.PRG.json نام گذاری کنید. زمان ایجاد این برنامه مطمئن شوید که Target SDKو Compile With در آخرین ورژن Android SDKهستند تا از سطوح بالاتر API استفاده کنید.

  • فایل src/MainActivity.java را برای افزودن کد لازم تغییر دهید.

  • res/layout/activity_main را برای افزودن مولفه های XML مربوطه تغییر دهید.

  • res/values/string.xml را برای افزودن مولفه های رشته ی لازم تغییر دهید.

  • برنامه را اجرا کنید، یک دستگاه اجرایی اندروید انتخاب کنید و برنامه را روی آن نصب کرده و نتایج را بررسی کنید.

در زیر محتوای تغییر یافته ی فایلMainActivity.java را مشاهده می کنید.

 

package com.PRG.json;

import android.app.Activity;
import android.os.StrictMode;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;

import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class MainActivity extends Activity {
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      TextView output = (TextView) findViewById(R.id.textView1);
      String strJson="
      {
         \"Employee\" :[
         {
            \"id\":\"01\",
            \"name\":\"Gopal Varma\",
            \"salary\":\"500000\"
         },
         {
            \"id\":\"02\",
            \"name\":\"Sairamkrishna\",
            \"salary\":\"500000\"
         },
         {
            \"id\":\"03\",
            \"name\":\"Sathish kallakuri\",
            \"salary\":\"600000\"
         }
         ]
      }";
      String data = "";
      try {
         JSONObject  jsonRootObject = new JSONObject(strJson);
         
         //Get the instance of JSONArray that contains JSONObjects
         JSONArray jsonArray = jsonRootObject.optJSONArray("Employee");
         
         //Iterate the jsonArray and print the info of JSONObjects
         for(int i=0; i < jsonArray.length(); i++){
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            
            int id = Integer.parseInt(jsonObject.optString("id").toString());
            String name = jsonObject.optString("name").toString();
            float salary = Float.parseFloat(jsonObject.optString("salary").toString());
            
            data += "Node"+i+" : \n id= "+ id +" \n Name= "+ name +" \n Salary= "+ salary +" \n ";
         }
         output.setText(data);
      } catch (JSONException e) {e.printStackTrace();}
   }
}

در زیر محتوای تغییر یافته ی فایلres/layout/activity_main.xml را مشاهده می کنید.

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
   
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="JSON example"
      android:id="@+id/textView"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
   
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials Point"
      android:id="@+id/textView2"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true"
      android:textSize="35dp"
      android:textColor="#ff16ff01" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="New Text"
      android:id="@+id/textView1"
      android:layout_below="@+id/textView2"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true" />
</RelativeLayout>

در زیر محتوای تغییر یافته ی فایلAndroidManifest.xml را مشاهده می کنید.

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.PRG.json" >
   
   <uses-permission android:name="android.permission.INTERNET"/>
   
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name=".MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
      
   </application>
</manifest>

اجازه بدهید برنامه ی اصلاح شده ی خود را اجرا کنیم. فرض می کنیم که در هنگام انجام تنظیمات محیط، AVD خود را ایجاد کرده اید. برای اجرای برنامه از eclipse، یکی از فایل های فعالیت پروژه را باز کنید و روی آیکن Run  از تولبار کلیک کنید. Eclipse برنامه را روی AVD شما نصب و آغازمی کند و اگر همه چیز در مورد برنامه و تنظیمات درست باشد، پنجره ی Emulator زیر نمایش داده خواهد شد.

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

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه