آموزشدانستنی‌ها

JSON با Jackson، (بخش اول-معرفی)

JSON و XML دو ساختار رایج تبادل داده‌های متنی هستند. بین این دو، JSON به دلیل توانایی سازماندهی مقدار برابری از داده در کاراکتر‌های کمتر، خوش‌خوان بودن برای انسان و سازگاری بیشتر با Java Script محبوبیت زیادی پیدا کرده است. در این مقاله بسته نرم‌افزاری محبوب کار با JSON در جاوا به نام Jackson معرفی می‌شود.

این نوشتار از سه بخش تشکیل شده است. در قسمت اول به نکاتی در مورد JSON اشاره می‌کنیم. بخش دوم، مثال ساده ای از کاربرد Jackson است و در انتها ماژول‌های این بسته نرم‌افزاری را معرفی خواهیم کرد تا آماده ی طی بقیه‌ی مسیر باشیم.

JSON

کامپیوتر‌ها نیازمند ارتباط با یکدیگرند. استفاده از پیام‌های ساده‌ی متنی اولین روش ارتباط بود اما به تدریج موجب بروز مشکلاتی شد که ناشی از وجود نداشتن هیچ استانداردی در تنظیم شکل پیام‌ها بود. زبان گسترش پذیر XML که به خوبی سازمان یافته، برای انتقال اشکال مختلف داده معرفی شد. این زبان به حدی ساخت‌یافته است که برخی، وجود این حد از قیود را محدودکننده می‌بینند. JSON جایگزین محبوب XML است که قواعد سبک‌تر و منعطف‌تری بر سازمان‌دهی داده در قالب متنی وضع کرده است. این فرمت مستقل از زبان‌های برنامه‌نویسی است. JSON در دنیای امروز، برای تبادل پیام در حجم بالا، برقرار ی ارتباط با وب سرویس های REST و ارتباطات AJAX‌ای مورد استفاده قرار می‌گیرد. همچنین این فرمت توسط پایگاه داده‌های NoSQL مانند MongoDB و Oracle NoSQL Database برای ذخیره‌ی رکورد‌های JSON‌ای به کار برده می‌شود. پایگاه داده‌های رابطه‌ای سنتی مانند PostgreSQL نیز امکانات بیشتری برای کار با JSON عرضه می‌کنند [DZone].

در دنیای جاوا به کرات مجبور به خواندن داده‌های JSON ای یا تولید آنها خواهیم شد. پیش از این که دست به کار شده و شروع به نوشتن متد‌هایی برای تبدیل ۱POJO ها به JSON و یا پردازش متن های JSON ای و تبدیل به POJO کنیم، باید ویژگی‌هایی که توسط Jackson عرضه شده‌اند را بررسی کنیم. این کتابخانه یکی از کتابخانه‌های پر استفاده و برتر جاوا به شمار می‌رود که بر اساس مقاله‌ی «صد کتابخانه برتر جاوا در سال ۲۰۱۶» در ردیف چهاردهمین کتابخانه پر استفاده در GitHub قرار گرفته است.

کاربرد Jackson

در این مثال یک شی POJO را به متن در قالب JSON تبدیل خواهیم کرد. برای این کار از کلاس ObjectMapper  استفاده می‌کنیم. برای آن که بتوانیم در مرحله‌ی بعد، از متنی که تولید شده بود استفاده کنیم، آن را در یک فایل خواهیم نوشت. برای ساختن POJO از JSON، متنی که در مرحله‌ی قبل ساخته‌ایم را به کار خواهیم گرفت.

تبدیل POJO به JSON

کلاس که شی‌ای از آن را استفاده خواهیم کرد کلاس Employee است:

این کلاس دارای Property های متفاوتی است. id به نمایندگی از متغیر های primitive، متغیر‌های firstName و lastName به نمایندگی از کلاس های موجود در API، متغیر phoneNumbers به نمایندگی از Collection ها و address به نمایندگی از کلاس‌هایی که توسط برنامه‌نویس تعریف می‌شوند، آورده شده‌اند. کلاس Address به این صورت تعریف می‌شود:

در ادامه توسط تابع زیر شی‌ای از این کلاس را می‌سازیم:

تبدیل به سادگی توسط Jackson تنها در یک سطر انجام می شود:

رشته‌ی نوشته شده در فایل Database.json به شکل زیر است:

تبدیل JSON به POJO

تابع زیر وظیفه‌ی تبدیل JSON به POJO و بازگرداندن آن را بر عهده دارد:

خروجی زیر در Console از اجرای toString روی شی‌ای از کلاس Empoyee تولید می‌شود.

که نشان می‌دهد تبدیل با موفقیت انجام گرفته است.

ماژول‌ها و نام‌گذاری Packageهای Jackson

بر اساس فایل README ماژول jackson-databind در گیت هاب، نام‌گذاری Packageها در ورژن اول و دوم تفاوت اساسی دارد. در نسخه‌ی دوم نام پکیج com.fasterxml.jackson.databind است در حالی که در نسخه‌ی یک org.codehaus.jackson.map بوده است.

از نسخه‌ی دوم به بعد، این بسته‌ی نرم‌افزاری به ماژول‌های مجزایی تقسیم شده و با groupId و artifactId های متفاوتی نسبت به نسخه‌ی اول در مخازن Maven عرضه می‌شود. نام‌گذاری این ماژول‌ها در نگاه اول چندان قابل فهم نیستند. به همین دلیل آن‌ها را در این قسمت بررسی می‌کنیم. مهم‌ترین آن‌ها به این شرح‌اند [منبع]:

DescriptionartifactIdgroupId
The core, which includes Streaming API, shared low-level abstractions (but NOT data-binding)jackson-corecom.fasterxml.jackson.core
Just
the annotations
jackson-annotationscom.fasterxml.jackson.core
Databinding; ObjectMapper, JsonNode and related classes are herejackson-databindcom.fasterxml.jackson.core
smile (binary JSON); Other artifacts in this group do other formatsjackson-dataformat-smilecom.fasterxml.jackson.dataformat
JAX-RS providerjackson-jaxrs-json-providercom.fasterxml.jackson.jaxrs
JAX-B annotations as additional configurationjackson-module-jaxb-annotationscom.fasterxml.jackson.module

در مقاله‌های بعدی با اصطلاحاتی مانند Streaming API که هسته‌ی مرکزی این بسته نرم‌افزاری است بیشتر آشنا خواهیم شد. همچنین دو روش تسهیل شده‌ی کار با JSON که عبارتند از Tree Model و Data Binding؛ معرفی خواهیم کرد، یک مقاله‌ی دو بخشی به شرح روش Data Binding اختصاص داده و در نهایت، در مقاله‌ی پنجم، کاربرد Jackson در وب-سرویس بررسی خواهیم کرد.

بخش دوم

منابع:

در نوشتن مجموعه مقالات حاضر، از منابع زیر استفاده شده است:

https://dzone.com/articles/processing-json-with-jackson

https://github.com/FasterXML/jackson-databind

https://github.com/FasterXML/jackson-docs

http://www.studytrails.com/java/json/java-jackson-introduction

http://www.cowtowncoder.com/blog/archives/cat_json.html


۱- POJO: Plain Old Java Object

.

.

.

با ما همراه باشید

آدرس کانال تلگرام: JavaCupIR@

آدرس اکانت توییتر: JavaCupIR@

آدرس صفحه اینستاگرام: javacup.ir

آدرس گروه لینکدین: Iranian Java Developers

نوشته های مشابه

یک دیدگاه

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

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

دکمه بازگشت به بالا