وبگاه شخصی حمیدرضا حسین خانی

در این وبگاه مطالب مرتبط با علوم کامپیوتر، هوش مصنوعی و روباتیک قرار میگیرد

وبگاه شخصی حمیدرضا حسین خانی

در این وبگاه مطالب مرتبط با علوم کامپیوتر، هوش مصنوعی و روباتیک قرار میگیرد

وبگاه شخصی حمیدرضا حسین خانی

کپی برداری آزاد!

طبقه بندی موضوعی
آخرین نظرات
  • ۱۷ مهر ۹۳، ۲۳:۰۹ - شیوا
    Mamnoonam

در نوشتار قبلی به فرمت فایل JSON اشاره شد. فایل JSON یک فایل متنی شبیه به XML است که برای تبدیل اشیاء (یا آرایه هایی از اشیاء) به یک رشته متنی و انتقال آن بین سیستم ها از طریق شبکه مورد استفاده قرار می گیرد.

کلاس زیر را در نظر بگیرید:

class Student {
String name;
String lastName;
String studentNo;
int age;
boolean sex;
}

 

یک شی خاص از این کلاس رو می توان به فرمت JSON زیر در یک فایل متنی نوشت و آنرا به راحتی از طریق شبکه (مثلا اینترنت) بین چند سیستم منتقل کرد:

 

{

                        “name” : “Hamidreza”

        “last_name” : “Hosseinkhani”

        “student_no” : “88014026000”

        “age” : 24

        “is_male” : true

}

 

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

از طرف دیگر این فرمت مزایایی هم نسبت به سایر فرمت های متنی مثل XML دارد و به همین دلیل، API های سرویس های وب RESTful اطلاعات را به صورت JSON ارسال می کنند.

یک فایل JSON ناخوانا را می توانید از طریق سایت زیر مرتب و خوانا کنید (توجه کنید که این خوانایی برای کامپیوتر اهمیتی ندارد و صرفا برای راحت تر خواندن خود شماست)

http://www.jsoneditoronline.org/

برای تجزیه یک فایل JSON که از سمت API وب آمده یک روش این است که خودتان به صورت دستی و با استفاده از کلاس های موجود در پکیج org.json این کار را انجام دهید. اما در اینصورت تمام فایل JSON روی حافظه دستگاه شما لود می شود و داده های کلاس از آن استخراج می شوند. اگر حجم فایل JSON زیاد باشد (که معمولا در اپلیکیشن های موبایل چنین نیست) این موضوع ضعف بزرگی خواهد بود. با این حال این روش در بسیاری از اپلیکیشن های موبایل استفاده می شود.

اما روش ساده تر این است که  با استفاده از کتابخانه هایی که به این منظور توسعه یافته اند فرایند پارس کردن فایل JSON را با تعداد خط کد کمتری به انجام رسانیم. Google GSON یکی از این کتابخانه هاست. GSON از خاصیت Reflection در Java استفاده کرده و یک فایل JSON را به مراتب سریع تر و حرفه ای تر از روش قبلی پارس می کند.

برای استفاده از کتابخانه GSON آدرس زیر را در قسمت Dependency های فایل Gradle اضافه کنید:

compile 'com.google.code.gson:gson:2.3'

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

Gson gson = new Gson();

Student student = gson.fromJson(jsonStr, Student.class);

برای اینکه مقادیر موجود در رشته JSON در صفات شی کپی شوند، لازم است نام متغیر ها در کلاس و فایل JSON یکسان باشد. اما گاهی (همانند مثال بالا) و به علت تفاوت استاندارد های نامگذاری بین برنامه نویسان موبایل و وب، ممکن است نام متغیر ها متفاوت باشند. برای نمونه در مثال بالا، کلاس Student یک متغیر به نام sex دارد که این متغیر در فایل JSON با نام is_male شناخته شده است. در این صورت لازم است در تعریف کلاس Student و در بالای متغیر sex نام دیگر آن، به صورت زیرعنوان شود:

@SerializedName(“is_male”)

boolean sex;

لازم به ذکر است که کتابخانه GSON به علت مقبولیت زیاد، از نسخه API 11 اندروید به صورت داخلی و با نام android.util.JsonReader به فریم ورک اضافه شده و قابل استفاده می باشد. اما برای نسخه های قدیمی تر اندروید باید از آن به صورت یک کتابخانه خارجی بهره برد.

استفاده از کتابخانه GSON بسیار ساده است، با این حال توصیه می کنم برای اطلاعات بیشتر، صفحه رسمی آن را مطالعه نمایید.

https://code.google.com/p/google-gson

به عنوان سخن آخر اشاره می کنم به کتابخانه دیگری به نام Jackson که بسیار سریعتر از Gson عمل می کند اما این سرعت در JSON های بسیار حجیم محسوس خواهد بود و در کاربردهای موبایل که با JSON های کم حجم سر و کار داریم به حجم بالا و کاربری سخت تر (نسبت به GSON) نمی ارزد.

موافقین ۲ مخالفین ۰ ۹۳/۰۷/۲۵
حمیدرضا حسین خانی

نظرات  (۱)

۲۷ آبان ۹۴ ، ۱۷:۴۷ امیر گنجه ای
سلام،

می خواستم ببینم چه جوری می شه با شما تماس گرفت؟

ممنون می شم آدرس ایمیلتون رو برای من ارسال کنید.

موفق باشید.
پاسخ:
میتونید بهم ایمیل بزنید در خدمتتون هستم
hosseinkhani@live.com

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی