مهدی عادلی فر
بنیانگذار توسینسو و برنامه نویس

آموزش کار با داده های JSON در جاوا به زبان ساده

چگونه با داده های Json در جاوا کار کنیم؟ امروزه به روش های مختلفی می توان داده ها را بین کامپیوتر های مختلف و حتی برنامه های مختلف انتقال داد. یکی از راه هایی که بیشترین استفاده را برای انتقال داده ها دارد انتقال داده ها بین کلاینت و سرور می باشد. به این صورت که داده هایی بر روی سرور ذخیره شده است. کلاینت برای این که این داده ها را به کاربر نشان دهد آنها را از سرور دریافت می کند یا حالتی دیگر آن است که کلاینت می خواهد داده هایی را در سرور ذخیره کند.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

در دوره آموزش جاوا ( آموزش برنامه نویسی جاوا ) این موارد بصورت رایگان آموزش داده شده است

کلاینت می تواند یک اپ موبایل و یا یک وب سایت و یا یک برنامه ویندوزی باشد. برای این کار داده ها را به سرور می فرستد. شکل و فرمت داده هایی که بین سرور و کلاینت تبادل می شوند بسیار مهم است. چند فرمت استاندارد برای تبادل داده ها وجود دارد که از آنها بسیار استفاده می شود. معروف ترین این فرمت ها xml, json می باشد. در حال حاضر می توان گفت که json در حال محبوب تر شدن است.داده های json به شکل زیر می باشند.

[{"Id":25,"Name":"Hosein","Family":"Ahmadi"},{"Id":36,"Name":"Website","Family":"Itpro"},{"Id":42,"Name":"Mehdi","Family":"Adeli"}]

در این مطلب قصد داریم که بگوییم در زبان جاوا چگونه می توان داده های معمولی را به داده های json تبدیل کرد و چگونه داده های json را به داده های معمولی تبدیل نمود. برای این کار روش های مختلفی وجود دارد. به خاطر این که زبان جاوا یک زبان شی گرا می باشد پس داده ها نیز در قالب شی و کلاس در این زبان ذخیره می شود. بهترین روش این است که داده های json به طور مستقیم به اشیائ تبدیل شوند و برعکس اشیاء جاوا نیز به طور مستقیم به متن json تبدیل گردند. یکی از کتابخانه هایی که این کار را به نحو احسن انجام می دهد کتابخانه Jackson می باشد ما در این مطلب از این کتابخانه استفاده می کنیم که باید فایل jar آن را از این لینک دانلود کرده و به برنامه اضافه کنیم. بعد از این که این کتابخانه به برنامه اضافه شد نوبت به نوشتن کد می رسد. در ادامه بر روی مثالی کار می کنیم که نشان دهیم چگونه این عمل تبدیل انجام می شود.

ساخت پروژه و اقدامات اولیه

برای شروع کار یک پروژه ساده جاوا می سازیم که یک تابع main هم داشته باشد.همچنین ما برای این که یک مدل داده های داشته باشیم یک کلاس دیگر هم ایجاد می کنیم تا بتوانیم داده ها را در قالب این مدل تبدیل نماییم. این مدل به شکل زیر خواهد بود

static class Model{
    public Model() {
    }

    public Model(int id, String name, String family) {
        Id = id;
        Name = name;
        Family = family;
    }

    public int Id;
    public String Name;
    public String Family;
}

همانطور که می بینید در مدل بالا ما سه عدد فیلد داریم که آنها را می توانیم حتی از طریق constructor هم مقدار دهی نماییم.به خاطر این که می خواهیم از این مدل در داخل تابع main استفاده کنیم و تابع main هم از Static است پس این کلاس را هم استاتیک تعریف می کنیم.

تبدیل داده اصلی به داده json

برای این کار در تابع main چند شئ از کلاس گفته شده می سازیم و آن را با استفاده از تبدیل کننده به رشته json ذخیره می کنیم. مانند کد زیر

public static void main(String[] args){
    ObjectMapper mapper=new ObjectMapper();
    Model model=new Model();
    model.Id=25;
    model.Family="Adeli";
    model.Name="Mehid";
try {
    String value=mapper.writeValueAsString(model);
    System.out.println(value);
} catch (IOException e) {
    e.printStackTrace();
}


در کد بالا از کلاس ObjectMapper یک شئ ساخته ایم. این شئ همه ی اعمال تبدیل به json و برعکس را می تواند انجام دهد. دقت داشته باشید که اگر کتابخانه Jackson را به برنامه اضافه نکرده باشید این شئ خطا خواهد داد. سپس یک شئ از کلاس Model که همان مدل داده ای ما است ساخته ایم و فیلد های آن را مقدار دهی کرده ایم. بعد از آن تنها کاری که کرده ایم این است که متد writeValueAsString را فراخوانی کرده ایم. این متد یک شئ را گرفته و تبدیل به داده json می کند و رشته را برمی گرداند که ما رشته را در یک متغیر به نام value ریخته ایم و آن را در خروجی نمایش می دهیم . خروجی برنامه بالا به شکل زیر خواهد بود

{"Id":25,"Name":"Mehid","Family":"Adeli"}

اگر بخواهید که خروجی json را در فایل ذخیره کنید می توانید از متد writeValue مربوط به mapper استفاده کنید. که شکل آن در زیر آورده شده است

mapper.writeValue(new File("c:\\file.json"), obj);

حال می توان این داده ها را در بستر اینترنت تبادل نمود

تبدیل داده های json به اشیاء جاوا

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

public static void main(String[] args){
    ObjectMapper mapper=new ObjectMapper();
try {
    String jsonValue="[{\"Id\":25,\"Name\":\"Mehdi\",\"Family\":\"Adeli\"},{\"Id\":36,\"Name\":\"Mohammad\",\"Family\":\"Nasiri\"},{\"Id\":42,\"Name\":\"Hosein\",\"Family\":\"Ahmadi\"}]";
    ArrayList<Model> convertedList=mapper.readValue(jsonValue,new TypeReference<ArrayList<Model>>(){});
for (Model m : convertedList) {
    System.out.println(m.Name);
}

} catch (IOException e) {
    e.printStackTrace();
}

در این کد ما یک رشته به نام jsonValue داریم که داده های json را داخل آن ریخته ایم. برای این که داده های json را به شئ تبدیل کنیم از متد readValue استفاده می کنیم. در مثال بالا ما یک لیست از داد های مدل قبل داریم. متد readValue دارای دو ورودی است یکی داده json و دیگری کلاسی که باید مشخص کنیم که داده های json را به آن تبدیل کند.

برای مثال در کد بالا می خواهیم داده ها را به یک ArrayList از نوع Model تبدیل کنیم. دقت داشته باشید که برای داده هایی که لیستی و مجموعه ای هستند باید مثل شکل بالا کار کنیم ولی برای داده هایی که پیچیده نیستند مانند داده های یک کلاس به راحتی می توان از شکل ساده آن استفاده کرد یعنی فرض کنید که داده ما یک شئ از کلاس Model باشد در این صورت در ورودی دوم Model.class را می نویسیم. خروجی کد بالا به شکل زیر خواهد بود

Mehdi
Mohammad
Hosein

امیدوارم این مطلب برای شما مفید بوده باشد


مهدی عادلی فر
مهدی عادلی فر

بنیانگذار توسینسو و برنامه نویس

مهدی عادلی، بنیان گذار TOSINSO. کارشناس ارشد نرم افزار کامپیوتر از دانشگاه صنعتی امیرکبیر و #C و جاوا و اندروید کار می کنم. در زمینه های موبایل و وب و ویندوز فعالیت دارم و به طراحی نرم افزار و اصول مهندسی نرم افزار علاقه مندم.

نظرات