قراءة بيانات json

يعرب المصطفىمنذ 6 سنوات

اللغة المستخدمة : swift 3

البرنامج المستخدم : xcode 8

 

السلام عليكم..

في هذا الدرس سنقوم بقراءة بيانات من نوع json باستخدام مكتبتين شهيرتين مخصصتين لهذا الغرض و هما :

Alamofire 

swifty json

 

بإمكانك القيام بالمشروع دون الاستعانة بهاتين المكتبتين، لكن ذلك سيستغرق وقتا أطول و قد يسبب بعض المشاكل.

ملاحظة : هذا الدرس هو تابع لدرس تنزيل المكتبات على مشروع xcode إذا لم تقم بقرائته قم بذلك الآن عبر الرابط التالي : 

http://www.3alampro.com/articles/swift/

 

في البداية قم بإنشاء مشروع xcode جديد و سمه Reading-Json على سبيل المثال

596bc65ed1311_ScreenShot2017-07-16at9_59_34PM.thumb.png.43f7b010f9aa0ecca616ba4a74c6b998.png

 

و الآن قم بإنشاء ملف الpod لتنزيل المكتبات ثم قم بفتح ملف الpod لإضافة ملفات المكتبتين إليه

يمكنك الاطلاع على أمر التنزيل بالبحث عن المكتبتين في git hup من خلال : 

رابط Alamofire :

https://github.com/Alamofire/Alamofire

رابط swifty json : 

https://github.com/SwiftyJSON/SwiftyJSON

 

أخيرا سيبدو شكل ملف الpod كالتالي : 

596bc65863a47_ScreenShot2017-07-16at10_10_47PM.png.758b7aeaa6e9d9f301ec6342ac107775.png

 

ثم قم بحفظ ملف الpod و اذهب إلى لوحة التحكم و قم بتشغيل أمر : pod install. 

الآن قم بإغلاق ملف الxcode و قم بفتح الملف الجديد الذي تم إنشاؤه و الذي يضم المكتبتين.

قم بعمل Build بالضغط على cmd+b حتى لا تواجهك مشاكل في العمل.

 

و الآن للتأكد من أن المكتبتين قد تم تنزيلهما توجه إلى ملف الview controller و قم بتجربة استيراد المكتبتين كما في الصورة التالية : 

596bc655a854f_ScreenShot2017-07-16at10_15_59PM.thumb.png.06794e03cb446acfa1c95428c721d8d9.png

 

إذا لم يظهر البرنامج أي أخطاء فهذا يعني أن المكتبتين تم استيرادهما بنجاح.

الآن سنبدأ عملية قراءة بيانات الjson و لكن حتى تتم قراءة البيانات لابد من وجود مصدر للقراءة منه و هذا المصدر سيكون الرابط التالي : 

https://jsonplaceholder.typicode.com/posts

 

قم بفتح الملف و ستجد أنه يحتوي على مجموعة من المنشورات (posts) بصيغة json و بالتالي يمكن قراءتها بداخل التطبيق.

الآن قم بالعودة إلى الxcode و قم بعمل function باسم read json و قم بإضافة كود إليها لتبدو كالتالي : 


func readJson()
    {
        Alamofire.request("https://jsonplaceholder.typicode.com/posts").responseJSON { (response) in //1
            if let json = response.result.value //2
            {
                print(json) //3
            }
        }
    }

١-

في السطر الأول قمنا بعمل request للرابط الذي يحوي ملفات الjson باستخدام الstatic method المسماة request من Alamofire الذي قمنا باستيراده داخل الview controller و من ثم حددنا نوع الاستجابة لتكون من نوع json حيث أن النتيجة التي نحاول قراءتها هي من نوع json و ذلك باستخدام .responseJSON و هذه الدالة تتلقى بارامتر من نوع closure حيث تقوم بوضع الأسطر البرمجية التي تريد بداخل هذا الclosure حيث سيتم تنفيذ كل هذه الأسطر البرمجية بمجرد الانتهاء تماما من قراءة البيانات حيث يتم استدعاء هذا الclousre و تزويده بargument يحتوي على البيانات التي تم قراءتها و يمكنك تسمية هذا الargument أو هذا البارامتر الاسم الذي تريد و في هذا المثال قمنا بتسميته باسم response.

 

ملاحظة : الclosure باختصار هي مجموعة من الأسطر البرمجية التي يمكن استدعاؤها و يمكن أن تعتبر function 

 

٢-

و في داخل هذا الclousre و تحديدا في السطر الثاني قمنا بالتأكد من احتواء المتغير response على قيمة من خلال التأكد من response.result.value و هذه خطوة مهمة جدا حيث أنك لا تريد طباعة البيانات إلا إذا تم التأكد أن هناك بيانات أصلا تم قراءتها دون مشاكل في الاتصال أو في الرابط أو في القراءة و نحو ذلك.

 

٣-

أخيرا في حال خلو القراءة من الأخطاء فإنا سنقوم بطباعة هذه الvalue و التي يمثلها المتغير json.

 

الآن قم باستدعاء الدالة في دالة الviewDidLoad لترى النتيجة..

سترى أن الconsole قام بطباعة نفس النتيجة التي ظهرت لك عند فتحك للرابط و بالتالي فإن القراءة تمت بنجاح.

 

و لكن  السؤال الآن كيف يمكن استخدام هذه البيانات في swift ؟ مجرد ظهورها بهذه الطريقة غير مفيد و لا يمكن استخدامه لذا لابد من تحويله إلى أحد العناصر المجودة في swift كالمتغيرات مثلا حينها سيكون من السهل التعامل مع البيانات و استخدامها و عرضها داخل التطبيق و هنا تكمن أهمية مكتبة swifty json حيث تقوم بتحويل الjson إلى أوبجكت من نوع json و هو شيء شبيه بالdictionary و بالتالي سيكون من السهل التعامل معه و على سبيل المثال قم بالعودة إلى الرابط لتفهم البناء و حينها سيمكنك الحصول على ماتريد منه بمجرد فهمك لكيفية بنائه. 

على سبيل المثال.. لنفرض أننا نريد الحصول على نص الpost الأول و طباعته.. ستجد أن ملف الjson هو عبارة عن array و كل عنصر في هذه الarray يمثل post على شكل json أو على شكل dictionary و بداخل كل post يوجد عدة خصائص خاصة بالpost منها عنصر الbody و هو الذي يمثل النص..

 لذلك قم بإضافة السطر التالي إلى الfunction لتبدو كالتالي :


 func readJson()
    {
        Alamofire.request("https://jsonplaceholder.typicode.com/posts").responseJSON { (response) in
            if let json = response.result.value
            {
                let obj = JSON(json)//1
                let text = obj[0]["body"].string//2
                print(text!)//3
            }
        }
    }

١-

في السطر الأول قمنا بعمل متغير باسم obj و هو من نوع json و هو نوع يمكنك عمل متغيرات منه بفضل استيرادك لمكتبة swifty json حيث يحول لك الjson إلى صيغة يسهل التعامل معها بداخل swift.

 

٢-

الآن هذا الobj يمثل مجموعة من المنشورات و نحن نريد الحصول على المنشور الأول لذلك قمنا بكتابة obj[0] حيث أن هذا يعني العنصر الأول و هو المنشور الأول ثم قمنا بإضافة ["body"] و ذلك لأننا نريد الحصول على الbody فقط من المنشور و هو ما يمثل النص و لا تهمنا العناصر الأخرى حاليا، أخيرا قمنا بإضافة .string و ذلك لتحويل البيانات التي يتم الحصول عليها إلى string.

 

٣-

أخيرا.. قمنا بطباعة هذا المتغير..

 

الآن قم بعمل run و انظر إلى النتيجة..

سترى بأن الconsole يقوم بطباعة بيانات و الآن عد إلى الرابط و تحديدا إلى المنشور الأول في قسم الbody ستجد أنه مطابق تماما لما تم طباعته.

596bc64b9871e_ScreenShot2017-07-16at11_00_08PM.png.736542efd3f0aae4182bcf0c9be1a3f4.png

 

إلى هنا نصل إلى نهاية هذا الدرس على أمل اللقاء بكم في دروس أخرى بإذن الله..

إلى ذلك الحين نستودعكم الله الذي لا تضيع ودائعه :) 

 

 

 

كلمات دليلية:
1
إعجاب
4345
مشاهدات
0
مشاركة
0
متابع

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !