• 0
ahmedsaoud31

التعامل مع الـJSON لتبادل وحفظ البيانات

سؤال

بسم الله الرحمن الرحيم

الحمد لله والصلاه والسلام على سيد الخلق أجمعين -صلى الله عليه وسلم-

السلام عليكم ورحمة الله وبركاتة

حديثنا اليوم عن تقنية JSON وهي إختصار لـ javaScript Object Notation وهي طريقة في لغة javaScript للتعامل مع البيانات , وتم إنتشارها ودعمها في أغلب لغات البرمجة الأخرى لسهولة وديناميكية التعامل مع هذه الطريقة ويمكن لنا إستخدام هذه الصيغة كبديل أمثل لنقل البيانات بدلاً من إستخدام ملفات XML .

وأيضاً إن كنت ممن يتعامل مع تطبيقات لها إتصال بخادم ستكون وسيلة جيدة لنقل البيانات بينهم وأيضاً تستخدم هذه التقنية في جلب البيانات من مواقع شهيرة كموقع twitter من خلالـ twitter json api وحالة الطقس من موقع yahoo من خلالـ yahoo json weather api

أولاً وقبل أن نخوض في التعامل مع تنسيق json من خلال لغة java علينا معرفة بنية هذا التنسيق لكيفية تحليل بياناته ومعرفة كيفية إستخدامه وإنشاء مكتباتك الخاصة للتعامل معه إن أردت ذلك ولكن هناك مكتبات كثيرة للتعامل مع هذا التنسيق في لغة java يمكنك إختيار ما تريد وستجدها على الموقع الرسمي لتنسيق json .

لكتابة تنسيق json علينا تضمينه ضمن علامتي أقواس معكوفة هكذا {} وداخل الأقواس يتم كتابة البيانات وبهذا نعرف كائن json

إذا أردنا تمثيل المتغيرات بتنسيق json يكون كالتالي

{"a":100}

وهذا عبارة عن تمثيل عدد صحيح داخل المتغير a وإسناد القيمة من خلال الرمز : وليس رمز المساواة = ويفضل أن يتم وضع اسم المتغير بين علامتي إقتباس لأن بعض لغات البرمجة لا تقبل اسم المتغير إلا أن يكون داخل علامتي إقتباس

إذا أردنا تمثيل أكثر من متغير يتم الفصل بينهم بإستخدام الفاصلة , ولا يشترط الترتيب

{"a":100,"b":300,"c":400}

ويمكن تمثيل بيانات مختلفة كالتالي

{"a":100,"b":122.016,"c":true,"d":"ahmed","e":null}

من ملاحظتنا للمثال السابق أنه تم تمثيل أعداد صحيحة وأعداد كسرية وقيم منطقية وقيم فارغة وأيضاً نص مع ملاحظة أن النص يجب أن يكون بين علامتي إقتباس

إذا أردنا تمثيل مصفوفة فالأقواس المربعة [] تدل على أن القيم الموجودة بداخلها هي عبارة عن مصفوفة ويفصل بين قيمها بالفاصلة ,

[10,20,30]

والمصفوفة هنا يمكن أن تحتوي أي نوع من البيانات كـ أعداد صحيحة وكسرية وقيم منطقية وقيم نصية والقيمة الفارغة

[10,110.12,"ahmed",false,null]

وأيضاً يمكن تحتوي داخلها على مصفوفات وقيم مختلفة بين علامتي أقواس المجموعة {} كالتالي

[10,{"a":12,"b":"ahmed","c":null},12.12,[30,"ahmed","kamal"],"jamal"]

وأيضاً العملية السابقة يمكن أن تتداخل وهكذا ...

بالنسبة للمصفوفات فالـkey أو الـindex للمصفوفة يمكن أن يكون نص بدلاً من الترتيب من 0 إلى أقل من عدد عناصر المصفوفة بمقدار 1 وهو ما يمكن عمله في لغة Java بـ HashMap أو hashTable ويكون تنسيقها بـ json كالتالي

["var1":10,"var2":20,"var3":30]

ويمكن أن تحتوي المتغيرات على مصفوفات بهذا الشكل

{"varArr1":["var1":10,"var2":20,"var3":30],"varArr2":["v1":12.00,"v2":30.00]}

وما سبق هو عملية تمثيل البيانات بصيغة json والتالي كيفية تصدير وجلب البيانات منها من خلال مكتبة json-simple

وهذه هي المكتبة بصيغة jar

json-simple-1.1.1.jar

وهذه بصيغة zip

json_simple-1.1-all.zip

فبعد تنزيل المكتبة من أحد الروابط السابقة أو من موقع المكتبة على الرابط التالي , سنقوم بتضمينها داخل المشروع لإستخدامها .

أولاً: عملية تصدير البيانات إلى صيغة json :

سنقوم بتضمين JSONObject من المكتبة التي تم تضمينها كالتالي :

import org.json.simple.JSONObject;

والآن في الدالة الرئيسية سنقوم بإنشاء كائن من الـ JSONObject ونضع له القيم من خلال الدالة put ومن ثَم طباعته على الشاشة -أو حفظ الناتج في ملف- كالتالي :

public static void main(String[] args){
JSONObject obj=new JSONObject();
obj.put("a",100);
obj.put("b",20.095);
obj.put("c","ahmed");
obj.put("d", true);
obj.put("e",null);
System.out.println(obj);
}

والخرج يكون كالتالي :

{"d":true,"e":null,"b":20.095,"c":"ahmed","a":100}

وكما أشرت سابقاً أن الترتيب غير مهم -كما نعلم من خواص المجموعات-

وإذا أردنا دمج كائنين من صيغة JSONObject سنستخدم دالة putAll لدمج الكائن الأول في الثاني وهذا كالتالي :

public static void main(String[] args){
JSONObject obj=new JSONObject();
obj.put("a",100);
obj.put("b",20.095);
obj.put("c","ahmed");
obj.put("d", true);
obj.put("e",null);

JSONObject obj2=new JSONObject();
obj2.put("val1",200);
obj2.put("val2",12.10);
obj2.put("val3","jamal");

obj2.putAll(obj);
System.out.println(obj2);
}

والمخرجات تكون على هذا النحو :

{"d":true,"e":null,"b":20.095,"c":"ahmed","a":100,"val3":"jamal","val1":200,"val2":12.1}

وإذا أردنا إدخال مصفوفة يجب علينا تضمين الـJSONArray من المكتبة كالتالي :

import org.json.simple.JSONArray;

والآن نقوم بإنشاء كائن من الـJSONArray ونسند له القيم بإستخدام دالة add كالتالي :

public static void main(String[] args){
JSONArray arr = new JSONArray();
arr.add("ahmed");
arr.add(10);
arr.add(true);
System.out.println(arr);
}

والمخرجات هي :

["ahmed",10,true]

ومن الكود السابق يتضح أن بإمكاننا تخزين قيم مختلفة داخل مصفوفة واحدة وهذا أمر جيد في حد ذاته لأنك تستطيع إستخدام هذه المصفوفة داخل برنامجك كما في الـhashMap أو الـhashTable كالتالي:

public static void main(String[] args){
JSONArray arr = new JSONArray();
arr.add("ahmed");
arr.add(10);
arr.add(true);
System.out.println(arr.get(0));
}

ويمكنك التعرف على باقي الدوال بنفسك

ولم أجد في هذه المكتبة إمكانية التحويل المباشر من وإلى الصيغة التالية للمصفوفات المترابطة :

["key1":10,"key2":ahmed,"key3":false]

والآن إذا أردنا الدمج بين كائن من الـ JSONArray ضمن كائن الـJSONObject يكون الكود كالتالي :

public static void main(String[] args){
JSONArray arr = new JSONArray();
arr.add("Ahmed");
arr.add(10);
arr.add(true);
JSONObject obj = new JSONObject();
obj.put("val1", 300);
obj.put("val2", "yousef");
obj.put("arr1",arr);
System.out.println(obj);
}

المخرجات :

{"val1":300,"arr1":["Ahmed",10,true],"val2":"yousef"}

وإذا أردنا العكس يكون الكود كالتالي :

public static void main(String[] args){
JSONArray arr = new JSONArray();
arr.add("Ahmed");
arr.add(10);
arr.add(true);
JSONObject obj = new JSONObject();
obj.put("val1", 300);
obj.put("val2", "yousef");
arr.add(obj);
System.out.println(arr);
}

والمخرجات :

["Ahmed",10,true,{"val1":300,"val2":"yousef"}]

ويمكن إستخدام الـhashMap والـlinkedList للتحويل لتنسيق json كالتالي -لا ننسى تضمينهم- :

public static void main(String[] args){
JSONObject obj = new JSONObject();
HashMap hashM = new HashMap();
LinkedList link = new LinkedList();
hashM.put("val1",100);
hashM.put("val2","ahmed");
link.add(hashM);
link.add("yousef");
obj.put("arr",link);
System.out.println(obj);
}

والمخرجات :

{"arr":[{"val1":100,"val2":"ahmed"},"yousef"]}

ثانياً: مع إستيراد البيانات من صيغة الـjson :

علينا تضمين JSONValue لإستخدام كائن التحويل منها كالتالي :

import org.json.simple.JSONValue;

سنضع في متغير باسم inputs سلسة نصية بصيغة json مع تلاشي تضارب علامة الإقتباس المتتالية نضع الرمز \ -أو جلبها من ملف إن أردت- وننشئ كائن لنضع به المخرجات لنستطيع التعامل معها وتحويلها لكائن JSONObject أو كائن JSONArray

وهذا مثال :

public static void main(String[] args){

String inputs="{\"a\":10,\"b\":\"ahmed\",\"c\":true}";
Object obj = JSONValue.parse(inputs);

JSONObject jsonObj = new JSONObject();

jsonObj = (JSONObject)obj;

System.out.println(jsonObj.get("a"));
System.out.println(jsonObj.get("b"));
System.out.println(jsonObj.get("c"));
}

المخرجات :

10
ahmed
true

وهذا مثال آخر للتحويل للـJSONArray وإستخدامه كالتالي :


public static void main(String[] args){

String inputs="{\"a\":10,\"b\":[100,{\"val1\":\"mohammed\",\"val2\":20.12},200,\"kamal\"],\"c\":true}";
Object obj = JSONValue.parse(inputs);

JSONObject jsonObj = new JSONObject();
JSONObject jsonObj2 = new JSONObject();
JSONArray jsonArr = new JSONArray();

jsonObj = (JSONObject)obj;
jsonArr = (JSONArray)jsonObj.get("b");
jsonObj2 = (JSONObject)jsonArr.get(1);

System.out.println(jsonObj.get("a"));
System.out.println(jsonObj.get("c"));
System.out.println(jsonArr.get(0));
System.out.println(jsonArr.get(2));
System.out.println(jsonArr.get(3));
System.out.println(jsonObj2.get("val1"));
System.out.println(jsonObj2.get("val2"));
}

والمخرجات :

10
true
100
200
kamal
mohammed
20.12

- وداخل موقع مكتبة json-simple هناك أمثلة أخرى يمكنكم الإطلاع عليها .

دمتم في أمان الله

تم تعديل بواسطه ahmedsaoud31
8

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

9 إجابة على هذا السؤال .

  • 0

السلام عليكم

يعطيك العافية أخي على مجهودك

بس يا ريت توضحلي كيف يتم تضمين json داخل المشروع لكي أستطيع أن أستخدمها و شكراً

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

يعطيك العافية أخي على مجهودك

بس يا ريت توضحلي كيف يتم تضمين json داخل المشروع لكي أستطيع أن أستخدمها و شكراً

تم من هنا :) شكراً :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

يمكنك تضمين المكتبة لمشروع واحد مباشراً كما في الصورة التالية :

post-254524-087941900 1355673277_thumb.j

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

روعة اخي ما شاء الله نحن نفتقد لهكذا نوع من الدروس ونتمنى الاستمرار لفائدة أكبر

وفقك الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

+1

درس جميل جدا, بارك الله فيك :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

بارك الله فيكم ويشرفني مروركم الكريم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ايهم افضل 

Eclipse

or

Netbeans

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

موضوع جميل ويستحق القراءة فعلا :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

موضوع ممتاز جزيت الجنة ...

 

لكن في الحقبقة بداية لم أفهم فائدتها أو ماهيتها بشكل واضح حتى قرأت رد باحد مواضيع المنتدى للأخ محمد كيلاني وأوردته هنا للفائدة :

 

 

الـ JSON , XML هى وسيلة لنقل البيانات بين شتئ المجالات

اذا اردت ان تقوم بالاتصال بين لغة برمجه ولغة اخرى فقد تجد الوسيلة احدهما

واذا اردت ان تبنى تطبيق يعتمد على Third party فستستخدم هذا الFormat

واذا اردت ان تقوم بالاتصال بالFacebook ,twitter ستجدهم يستخدمون الـ JSON

على سيبل المثال

https://dev.twitter.com/docs/api/1.1/get/statuses/home_timeline

 

 

بالتوفيق

 

 

شكرا لك مرة أخرى وشكرا للأخ محمد ..

تم تعديل بواسطه JAVA FOR ALL
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .