كيف تتعامل مع بيانات JSON في لغة بايثون

json شرح :
json شرح في البايثون : أهلا وسهلا بكم في هذا المقال من بايثونات والذي نتناول فيه كيفية التعامل مع بيانات json في لغة بايثون. في البداية سنتكلم عن ما هي json ثم سننتقل الى المكتبة المعيارية في البايثون والمختصة بهذا النوع من البيانات، ثم نشرح مثال عملي لقراءة بيانات على هيئة json مُتاحة للعامة في الإنترنت. هذا المقال موجه بالدرجة الأولى للمبتدئين في تعلم البايثون، حيث يُقدم معلومات أساسية في الموضوع.
ما هي json ؟
json هي اختصار لمصطلح JavaScript Object Notation، وهي معيار خاص يُستخدم في تمثيل البيانات في ملف أو مصدر بيانات ما، بحيث يستطيع الانسان قراءة البيانات بشكل سهل ومفهوم. الهدف من المعيار هو تقديم طريقة لتبادل البيانات بشكل متوافق عليه بين البرامج والأنظمة، ويعتمد طريقة خاصة في كتابة البيانات في الملف. بالطبع json ليست لغة ترميز او لغة برمجة، فهي تختص بالبيانات فقط.
كيف نكتب البيانات في json ؟
الطريقة الأشهر في كتابة البيانات على شكل json هي طريقة الكائن object. من خلال هذه الطريقة نستخدم الأقواس المُزهرة { } في كتابة البيانات بينها، ونُعطي كل عنصر من البيانات اسم مُعين يُمكن ان نعتبره المفتاح Key. كل مفتاح ترتبط به قيمة مُعينة Value تُمثل البيانات. يُمكن ان تكون القيمة عبارة عن عنصر json آخر.
json في لغة بايثون
[pastacode lang=”python” manual=”import%20json” message=”” highlight=”” provider=”manual”/]
قراءة بيانات json وتحويلها لبايثون
يُمكننا تحويل البيانات الموجودة على هيئة نص json الى ما يقابلها من بيانات بايثون. لهذا الغرض نستخدم الدالة json.loads. من المهم أن نعرف هنا أن لغة البايثون تتعامل مع بيانات json كنص، وعليه فإن البيانات التي سنمررها لدالة json.loads ستكون بيانات بصيغة نصية. انظر المثال التالي الذي يعمل على تحويل بيانات json الى ما يُقابلها في البايثون:
[pastacode lang=”python” manual=”import%20json%0A%0A%23%20json%20data%20as%20string%0Apythonat_json%20%3D%20’%7B%20%22Blog%20Name%22%3A%22Pythonat%22%2C%20%22Articles%22%3A19%2C%20%22Authors%22%3A%7B%22Founder%22%3A%22Ibrahim%22%2C%22CoFounder%22%3A%22Nasser%22%7D%20%7D’%0A%0A%23%20parse%20json%20string%0Apythonat_python%20%3D%20json.loads(pythonat_json)%0A%0Aprint(pythonat_python%5B%22Authors%22%5D)” message=”” highlight=”” provider=”manual”/]
لاحظ معي أن العنصر Authors هو عنصر json مُضمن داخل العنصر الرئيسي في مثالنا، فالعنصر الرئيسي يحتوي على 3 عناصر هي:
- Blog Name عند تحويله لبايثون سيكون من نوع نص
- Articles عند تحويله لبايثون سيكون من نوع رقم
- Authors عند تحويله لبايثون سيكون من نوع قاموس
[pastacode lang=”python” manual=”%23%20result%20will%20be%20str%0Atype(pythonat_python%5B%22Blog%20Name%22%5D)%0A%0A%23%20result%20will%20be%20int%0Atype(pythonat_python%5B%22Articles%22%5D)%0A%0A%23%20result%20will%20be%20dict%0Atype(pythonat_python%5B%22Authors%22%5D)” message=”” highlight=”” provider=”manual”/]
التحويل من بايثون إلى json
كما أنه يُمكننا تحويل بيانات json الى ما يُقابلها في بايثون، يُمكننا من خلال مكتبة json في بايثون من إجراء التحويل بطريقة عكسية. لنعمل على تحويل عُنصر من نوع قاموس في البايثون إلى ما يُقابله في json.
يتم ذلك من خلال استخدام دالة json.dumps كما يلي:
[pastacode lang=”python” manual=”import%20json%0A%0A%23%20python%20variable%20as%20dict%0Apythonat_python%20%3D%20%7B%20%22Blog%20Name%22%3A%22Pythonat%22%2C%20%22Articles%22%3A19%2C%20%22Authors%22%3A%0A%09%09%09%7B%22Founder%22%3A%22Ibrahim%22%2C%22CoFounder%22%3A%22Nasser%22%7D%7D%0A%0A%23%20dumps%20dict%20to%20json%0Apythonat_json%20%3D%20json.dumps(pythonat_json)%0A%0Aprint(pythonat_json)” message=”” highlight=”” provider=”manual”/]
عند التعامل مع بيانات json في بايثون من المهم لنا معرفة أنواع البيانات التي يُمكننا التعامل معها في عملية التحويل من والى البايثون. الجدول التالي يُوضح لنا ما هي أنواع البيانات في بايثون وما يُقابلها في json:
[spbtbl_sc id=7]
المثال التالي يشمل جميع أنواع البيانات التي يُمكن استخدامها في البايثون وتحويلها الى بيانات من نوع json:
[pastacode lang=”python” manual=”import%20json%0A%0Apythonat_data%20%3D%20%7B%0A%20%20%22Blog%20Name%22%3A%20%22Pythonat%22%2C%0A%20%20%22Authors%22%3A%20%5B%0A%20%20%20%20%7B%22Name%22%3A%20%22Ibrahim%22%2C%20%22Age%22%3A%2033%7D%2C%0A%20%20%20%20%7B%22Name%22%3A%20%22Nasser%22%2C%20%22Age%22%3A%2038%7D%0A%20%20%5D%2C%0A%20%20%22Articles%22%3A%2020%2C%0A%20%20%22New%20Blog%22%3A%20True%2C%0A%20%20%22News%20Blog%22%3A%20False%2C%0A%20%20%22Errors%22%3A%20None%2C%0A%20%20%22Categories%22%3A%20(%22Networking%22%2C%22Data%20Science%22%2C%22GUI%22%2C%20%22Security%22%2C%22Packages%22)%0A%7D%0A%0Aprint(json.dumps(pythonat_data))” message=”” highlight=”” provider=”manual”/]
مثال عملي: قراءة بيانات json في لغة بايثون من الويب
كما أنه يُمكننا قراءة متغير من نوع نصي على شكل json، يُمكننا التعامل مع أي مصدر بيانات يُتيح لنا الحصول على بياناته بشكل json. في هذا العنوان نحن نتحدث عن كيفية قراءة بيانات json موجودة على الانترنت.
هذه الحالة شائعة في الكثير من البرامج والتطبيقات، وهي ان نتعامل مباشرةً مع البيانات الموجودة على شكل json. نحتاج لذلك الاستعانة بالمكتبة المعيارية الشهيرة في بايثون urllib التي يُمكننا من خلالها التعامل مع الروابط urls.
سنعمل في هذا المثال على قراءة بيانات خاصة بجائزة نوبل العالمية. البيانات مُتاحة للعامة على شكل json من خلال الرابط التالي:
بيانات جائزة نوبل على هيئة JSON
في البداية نستورد المكتبات اللازمة للعمل، ثم نستخدم دالة urlopen الموجودة في وحدة urllib.request والتي سنستعين بها لقراءة الناتج من رابط البيانات. الناتج سيكون من نوع HTTPRespose. اذا استطعنا قراءة الرابط بشكل صحيح، سيكون رقم حالة الطلب العائد من طلب الرابط هو 200 (لمعرفة المزيد حول أرقام حالات طلب http يُمكنك الاطلاع هنا). 200 تعني أننا استطعنا قراء الرابط بنجاح.
بعد ذلك نقرأ البيانات الراجعة من طلب الرابط من خلال دالة read ونحفظها في متغير باسم data.
[pastacode lang=”python” manual=”import%20urllib.request%0Aimport%20json%0A%0AurlData%20%3D%20%22http%3A%2F%2Fapi.nobelprize.org%2Fv1%2Fprize.json%22%0AwebUrl%20%3D%20urllib.request.urlopen(urlData)%0Aprint(webUrl)%0Aif%20(webUrl.getcode()%20%3D%3D%20200)%3A%0A%20%20%20%20data%20%3D%20webUrl.read()%0Aelse%3A%0A%20%20%20%20print%20(%22Error%20codde%3A%22%20%2B%20str(webUrl.getcode()))%0A” message=”” highlight=”” provider=”manual”/]
سنعمل على تجهيز دالتين، الأولى باسم count_years وتعمل على الحصول على عدد جوائز نوبل لكل سنة منذ بداية توزيع جوائز نوبل، والدالة الثانية باسم print_names تعمل على طباعة أسماء الأشخاص الذين حصلوا على جائزة نوبل حسب المجال وحسب العام. سأشرح الدوال مباشرة في الشيفرة البرمجية.
دالة count_years:
[pastacode lang=”python” manual=”%23%D8%AF%D8%A7%D9%84%D8%A9%20%D8%A7%D9%84%D8%AD%D8%B5%D9%88%D9%84%20%D8%B9%D9%84%D9%89%20%D8%B9%D8%AF%D8%AF%20%D8%A7%D9%84%D8%AC%D9%88%D8%A7%D8%A6%D8%B2%20%D9%84%D9%83%D9%84%20%D8%B9%D8%A7%D9%85%0Adef%20count_years(data)%3A%0A%20%20%20%20%23%D9%86%D8%AD%D9%88%D9%84%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%20%D8%A7%D9%84%D9%86%D8%A7%D8%AA%D8%AC%D8%A9%20%D8%B9%D9%86%20%D9%82%D8%B1%D8%A7%D8%A1%D8%A9%20%D8%B1%D8%AF%20%D8%A7%D9%84%D8%B7%D9%84%D8%A8%20%D8%A7%D9%84%D9%89%20%D8%AC%D9%8A%D8%B3%D9%88%D9%86%0A%20%20%20%20theJSON%20%3D%20json.loads(data)%0A%20%20%20%20%23%D9%86%D8%B9%D8%B1%D9%81%20%D9%85%D8%AA%D8%BA%D9%8A%D8%B1%20%D9%85%D9%86%20%D9%86%D9%88%D8%B9%20%D9%82%D8%A7%D9%85%D9%88%D8%B3%20%D8%B3%D9%8A%D9%83%D9%88%D9%86%20%D9%81%D9%8A%D9%87%20%D8%A7%D9%84%D8%B9%D8%A7%D9%85%20%D9%87%D9%88%20%D8%A7%D9%84%D9%85%D9%81%D8%AA%D8%A7%D8%AD%20%D9%88%D8%B9%D8%AF%D8%AF%20%D8%A7%D9%84%D8%AC%D9%88%D8%A7%D8%A6%D8%B2%20%D9%87%D9%8A%20%D8%A7%D9%84%D9%82%D9%8A%D9%85%D8%A9%0A%20%20%20%20counts%20%3D%20%7B%7D%0A%20%20%20%20%23%D8%A8%D8%B9%D8%AF%20%D8%A7%D9%86%20%D8%A7%D8%B7%D9%84%D8%B9%D9%86%D8%A7%20%D8%B9%D9%84%D9%89%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%20%D9%81%D9%8A%20%D8%AC%D9%8A%D8%B3%D9%88%D9%86%20%D9%88%D9%81%D9%87%D9%85%D9%86%D8%A7%20%D9%87%D9%8A%D9%83%D9%84%D8%AA%D9%87%D8%A7%20%D8%B9%D8%B1%D9%81%D9%86%D8%A7%20%D8%A7%D9%86%D9%86%D8%A7%20%D8%B3%D9%86%D8%A8%D8%AD%D8%AB%20%D8%B9%D9%86%20%D8%A7%D9%84%D8%B9%D9%86%D8%B5%D8%B1%20%D8%A8%D8%A7%D8%B3%D9%85%0A%20%20%20%20%23prizes%0A%20%20%20%20%23%D9%86%D9%82%D9%88%D9%85%20%D8%A8%D8%A7%D9%84%D9%85%D8%B1%D9%88%D8%B1%20%D8%B9%D9%84%D9%89%20%D9%83%D9%84%20%D8%AC%D8%A7%D8%A6%D8%B2%D8%A9%0A%20%20%20%20for%20i%20in%20theJSON%5B%22prizes%22%5D%3A%0A%20%20%20%20%20%20%20%20%23%D9%86%D8%AA%D8%A3%D9%83%D8%AF%20%D9%85%D9%86%20%D9%88%D8%AC%D9%88%D8%AF%20%D8%A7%D9%84%D8%B9%D8%A7%D9%85%20%D9%84%D9%84%D8%AC%D8%A7%D8%A6%D8%B2%D8%A9%0A%20%20%20%20%20%20%20%20if%20%22year%22%20in%20i%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%D8%AF%D8%AE%D9%88%D9%84%D9%86%D8%A7%20%D8%AA%D8%AD%D8%AA%20%D9%87%D8%B0%D9%87%20%D8%A7%D9%84%D8%AC%D9%85%D9%84%D8%A9%20%D8%A7%D9%84%D8%B4%D8%B1%D8%B7%D9%8A%D8%A9%20%D9%8A%D8%B9%D9%86%D9%8A%20%D8%A7%D9%86%D9%87%20%D9%8A%D9%88%D8%AC%D8%AF%20%D8%B9%D9%86%D8%B5%D8%B1%20%D8%A8%D9%87%20%D8%B1%D9%82%D9%85%20%D8%B9%D8%A7%D9%85%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%D9%86%D8%AD%D9%81%D8%B8%20%D8%B1%D9%82%D9%85%20%D8%A7%D9%84%D8%B9%D8%A7%D9%85%20%D8%A7%D9%84%D8%B0%D9%8A%20%D8%B5%D8%AF%D8%B1%D8%AA%20%D9%81%D9%8A%D9%87%20%D8%A7%D9%84%D8%AC%D8%A7%D8%A6%D8%B2%D8%A9%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%D8%AB%D9%85%20%D9%86%D8%B6%D9%8A%D9%81%20%D8%B9%D9%84%D9%89%20%D9%85%D8%AC%D9%85%D9%88%D8%B9%20%D8%AA%D9%83%D8%B1%D8%A7%D8%B1%D9%87%D8%A7%20%D9%81%D9%8A%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%20%D8%A8%D8%B1%D9%82%D9%85%201%0A%20%20%20%20%20%20%20%20%20%20%20%20counts%5Bi%5B%22year%22%5D%5D%20%3D%20counts.get(i%5B%22year%22%5D%2C0)%20%2B%201%0A%20%20%20%20%23%D9%86%D8%B7%D8%A8%D8%B9%20%D8%B9%D8%AF%D8%AF%20%D8%A7%D9%84%D8%AC%D9%88%D8%A7%D8%A6%D8%B2%0A%20%20%20%20print(counts)%0A%20%20%20%20return%20counts” message=”” highlight=”” provider=”manual”/]
دالة print_names:
[pastacode lang=”python” manual=”%23%D8%AF%D8%A7%D9%84%D8%A9%20%D8%B7%D8%A8%D8%A7%D8%B9%D8%A9%20%D8%A3%D8%B3%D9%85%D8%A7%D8%A1%20%D8%A7%D9%84%D8%AD%D8%A7%D8%B5%D9%84%D9%8A%D9%86%20%D8%B9%D9%84%D9%89%20%D8%A7%D9%84%D8%AC%D8%A7%D8%A6%D8%B2%D8%A9%0Adef%20print_names(data)%3A%0A%20%20%20%20%23%D9%86%D8%AD%D9%88%D9%84%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%20%D8%A7%D9%84%D9%86%D8%A7%D8%AA%D8%AC%D8%A9%20%D8%B9%D9%86%20%D9%82%D8%B1%D8%A7%D8%A1%D8%A9%20%D8%B1%D8%AF%20%D8%A7%D9%84%D8%B7%D9%84%D8%A8%20%D8%A7%D9%84%D9%89%20%D8%AC%D9%8A%D8%B3%D9%88%D9%86%0A%20%20%20%20theJSON%20%3D%20json.loads(data)%0A%0A%20%20%20%20%23%20%D9%86%D9%82%D9%88%D9%85%20%D8%A8%D8%A7%D9%84%D9%85%D8%B1%D9%88%D8%B1%20%D8%B9%D9%84%D9%89%20%D9%83%D9%84%20%D8%AC%D8%A7%D8%A6%D8%B2%D8%A9%20%D8%B9%D9%86%20%D8%B7%D8%B1%D9%8A%D9%82%20%D8%AD%D9%84%D9%82%D8%A9%20%D8%AA%D9%83%D8%B1%D8%A7%D8%B1%0A%20%20%20%20for%20i%20in%20theJSON%5B%22prizes%22%5D%3A%0A%20%20%20%20%20%20%20%20%23%D9%84%D9%83%D9%84%20%D8%AC%D8%A7%D8%A6%D8%B2%D8%A9%20%D9%86%D8%B7%D8%A8%D8%B9%20%D8%B3%D8%B7%D8%B1%20%D9%8A%D8%AD%D8%AA%D9%88%D9%8A%20%D8%B9%D9%84%D9%89%20%D9%86%D8%B5%20%D9%88%D9%86%D9%88%D8%B9%20%D9%85%D8%AC%D8%A7%D9%84%20%D8%A7%D9%84%D8%AC%D8%A7%D8%A6%D8%B2%D8%A9%20%D9%88%D8%A7%D9%84%D8%B9%D8%A7%D9%85%20%D8%A7%D9%84%D8%AA%D9%8A%20%D8%B5%D8%AF%D8%B1%D8%AA%20%D9%81%D9%8A%D9%87%0A%20%20%20%20%20%20%20%20print((%22%25s%22%2Bi%5B%22category%22%5D%2B%22%25s%22%2Bi%5B%22year%22%5D)%20%25%20(%22The%20winners%20of%20%22%2C%22%20prize%20for%20year%22))%0A%20%20%20%20%20%20%20%20%23%D9%84%D9%83%D9%84%20%D8%AC%D8%A7%D8%A6%D8%B2%D8%A9%20%D9%82%D8%AF%20%D9%8A%D9%83%D9%88%D9%86%20%D9%87%D9%86%D8%A7%D9%83%20%D8%A7%D9%83%D8%AB%D8%B1%20%D9%85%D9%86%20%D9%81%D8%A7%D8%A6%D8%B2%D8%8C%20%D9%86%D8%B3%D8%AA%D8%AE%D8%AF%D9%85%20%D8%AD%D9%84%D9%82%D8%A9%20%D8%AA%D9%83%D8%B1%D8%A7%D8%B1%20%D9%84%D9%84%D9%85%D8%B1%D9%88%D8%B1%20%D8%B9%D9%84%D9%89%20%D9%83%D9%84%20%D9%81%D8%A7%D8%A6%D8%B2%20%D9%88%D9%86%D8%B7%D8%A8%D8%B9%20%D8%A7%D8%B3%D9%85%D9%87%0A%20%20%20%20%20%20%20%20%23%D9%86%D8%B3%D8%AA%D8%AE%D8%AF%D9%85%20%D9%87%D9%86%D8%A7%20%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%AB%D9%86%D8%A7%D8%A1%20%D9%84%D9%88%D8%AC%D9%88%D8%AF%20%D8%A8%D8%B9%D8%B6%20%D8%A7%D9%84%D8%AC%D9%88%D8%A7%D8%A6%D8%B2%20%D8%A7%D9%84%D8%AA%D9%8A%20%D9%84%D9%8A%D8%B3%20%D9%84%D9%87%D8%A7%20%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%20%D9%83%D8%A7%D9%85%D9%84%D8%A9%20(%D9%84%D9%86%20%D9%86%D8%B7%D8%A8%D8%B9%D9%87%D8%A7)%20%D9%84%D8%B9%D8%AF%D9%85%20%D9%88%D8%AC%D9%88%D8%AF%D9%87%D8%A7%20%D8%A3%D8%B3%D8%A7%D8%B3%D9%8B%D8%A7%0A%20%20%20%20%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20x%20in%20i%5B%22laureates%22%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20print(%22%20%20%20%22%2Bx%5B%22firstname%22%5D%2B%22%20%22%2Bx%5B%22surname%22%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20except%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pass%0A%20%20%20%20%20%20%20%20except%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20pass” message=”” highlight=”” provider=”manual”/]
المثال كاملًا:
[pastacode lang=”python” manual=”import%20urllib.request%0Aimport%20json%0A%0A%23%D8%AF%D8%A7%D9%84%D8%A9%20%D8%A7%D9%84%D8%AD%D8%B5%D9%88%D9%84%20%D8%B9%D9%84%D9%89%20%D8%B9%D8%AF%D8%AF%20%D8%A7%D9%84%D8%AC%D9%88%D8%A7%D8%A6%D8%B2%20%D9%84%D9%83%D9%84%20%D8%B9%D8%A7%D9%85%0Adef%20count_years(data)%3A%0A%20%20%20%20%23%D9%86%D8%AD%D9%88%D9%84%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%20%D8%A7%D9%84%D9%86%D8%A7%D8%AA%D8%AC%D8%A9%20%D8%B9%D9%86%20%D9%82%D8%B1%D8%A7%D8%A1%D8%A9%20%D8%B1%D8%AF%20%D8%A7%D9%84%D8%B7%D9%84%D8%A8%20%D8%A7%D9%84%D9%89%20%D8%AC%D9%8A%D8%B3%D9%88%D9%86%0A%20%20%20%20theJSON%20%3D%20json.loads(data)%0A%20%20%20%20%23%D9%86%D8%B9%D8%B1%D9%81%20%D9%85%D8%AA%D8%BA%D9%8A%D8%B1%20%D9%85%D9%86%20%D9%86%D9%88%D8%B9%20%D9%82%D8%A7%D9%85%D9%88%D8%B3%20%D8%B3%D9%8A%D9%83%D9%88%D9%86%20%D9%81%D9%8A%D9%87%20%D8%A7%D9%84%D8%B9%D8%A7%D9%85%20%D9%87%D9%88%20%D8%A7%D9%84%D9%85%D9%81%D8%AA%D8%A7%D8%AD%20%D9%88%D8%B9%D8%AF%D8%AF%20%D8%A7%D9%84%D8%AC%D9%88%D8%A7%D8%A6%D8%B2%20%D9%87%D9%8A%20%D8%A7%D9%84%D9%82%D9%8A%D9%85%D8%A9%0A%20%20%20%20counts%20%3D%20%7B%7D%0A%20%20%20%20%23%D8%A8%D8%B9%D8%AF%20%D8%A7%D9%86%20%D8%A7%D8%B7%D9%84%D8%B9%D9%86%D8%A7%20%D8%B9%D9%84%D9%89%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%20%D9%81%D9%8A%20%D8%AC%D9%8A%D8%B3%D9%88%D9%86%20%D9%88%D9%81%D9%87%D9%85%D9%86%D8%A7%20%D9%87%D9%8A%D9%83%D9%84%D8%AA%D9%87%D8%A7%20%D8%B9%D8%B1%D9%81%D9%86%D8%A7%20%D8%A7%D9%86%D9%86%D8%A7%20%D8%B3%D9%86%D8%A8%D8%AD%D8%AB%20%D8%B9%D9%86%20%D8%A7%D9%84%D8%B9%D9%86%D8%B5%D8%B1%20%D8%A8%D8%A7%D8%B3%D9%85%0A%20%20%20%20%23prizes%0A%20%20%20%20%23%D9%86%D9%82%D9%88%D9%85%20%D8%A8%D8%A7%D9%84%D9%85%D8%B1%D9%88%D8%B1%20%D8%B9%D9%84%D9%89%20%D9%83%D9%84%20%D8%AC%D8%A7%D8%A6%D8%B2%D8%A9%0A%20%20%20%20for%20i%20in%20theJSON%5B%22prizes%22%5D%3A%0A%20%20%20%20%20%20%20%20%23%D9%86%D8%AA%D8%A3%D9%83%D8%AF%20%D9%85%D9%86%20%D9%88%D8%AC%D9%88%D8%AF%20%D8%A7%D9%84%D8%B9%D8%A7%D9%85%20%D9%84%D9%84%D8%AC%D8%A7%D8%A6%D8%B2%D8%A9%0A%20%20%20%20%20%20%20%20if%20%22year%22%20in%20i%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%D8%AF%D8%AE%D9%88%D9%84%D9%86%D8%A7%20%D8%AA%D8%AD%D8%AA%20%D9%87%D8%B0%D9%87%20%D8%A7%D9%84%D8%AC%D9%85%D9%84%D8%A9%20%D8%A7%D9%84%D8%B4%D8%B1%D8%B7%D9%8A%D8%A9%20%D9%8A%D8%B9%D9%86%D9%8A%20%D8%A7%D9%86%D9%87%20%D9%8A%D9%88%D8%AC%D8%AF%20%D8%B9%D9%86%D8%B5%D8%B1%20%D8%A8%D9%87%20%D8%B1%D9%82%D9%85%20%D8%B9%D8%A7%D9%85%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%D9%86%D8%AD%D9%81%D8%B8%20%D8%B1%D9%82%D9%85%20%D8%A7%D9%84%D8%B9%D8%A7%D9%85%20%D8%A7%D9%84%D8%B0%D9%8A%20%D8%B5%D8%AF%D8%B1%D8%AA%20%D9%81%D9%8A%D9%87%20%D8%A7%D9%84%D8%AC%D8%A7%D8%A6%D8%B2%D8%A9%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%D8%AB%D9%85%20%D9%86%D8%B6%D9%8A%D9%81%20%D8%B9%D9%84%D9%89%20%D9%85%D8%AC%D9%85%D9%88%D8%B9%20%D8%AA%D9%83%D8%B1%D8%A7%D8%B1%D9%87%D8%A7%20%D9%81%D9%8A%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%20%D8%A8%D8%B1%D9%82%D9%85%201%0A%20%20%20%20%20%20%20%20%20%20%20%20counts%5Bi%5B%22year%22%5D%5D%20%3D%20counts.get(i%5B%22year%22%5D%2C0)%20%2B%201%0A%20%20%20%20%23%D9%86%D8%B7%D8%A8%D8%B9%20%D8%B9%D8%AF%D8%AF%20%D8%A7%D9%84%D8%AC%D9%88%D8%A7%D8%A6%D8%B2%0A%20%20%20%20print(counts)%0A%20%20%20%20return%20counts%0A%0A%23%D8%AF%D8%A7%D9%84%D8%A9%20%D8%B7%D8%A8%D8%A7%D8%B9%D8%A9%20%D8%A3%D8%B3%D9%85%D8%A7%D8%A1%20%D8%A7%D9%84%D8%AD%D8%A7%D8%B5%D9%84%D9%8A%D9%86%20%D8%B9%D9%84%D9%89%20%D8%A7%D9%84%D8%AC%D8%A7%D8%A6%D8%B2%D8%A9%0Adef%20print_names(data)%3A%0A%20%20%20%20%23%D9%86%D8%AD%D9%88%D9%84%20%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%20%D8%A7%D9%84%D9%86%D8%A7%D8%AA%D8%AC%D8%A9%20%D8%B9%D9%86%20%D9%82%D8%B1%D8%A7%D8%A1%D8%A9%20%D8%B1%D8%AF%20%D8%A7%D9%84%D8%B7%D9%84%D8%A8%20%D8%A7%D9%84%D9%89%20%D8%AC%D9%8A%D8%B3%D9%88%D9%86%0A%20%20%20%20theJSON%20%3D%20json.loads(data)%0A%0A%20%20%20%20%23%20%D9%86%D9%82%D9%88%D9%85%20%D8%A8%D8%A7%D9%84%D9%85%D8%B1%D9%88%D8%B1%20%D8%B9%D9%84%D9%89%20%D9%83%D9%84%20%D8%AC%D8%A7%D8%A6%D8%B2%D8%A9%20%D8%B9%D9%86%20%D8%B7%D8%B1%D9%8A%D9%82%20%D8%AD%D9%84%D9%82%D8%A9%20%D8%AA%D9%83%D8%B1%D8%A7%D8%B1%0A%20%20%20%20for%20i%20in%20theJSON%5B%22prizes%22%5D%3A%0A%20%20%20%20%20%20%20%20%23%D9%84%D9%83%D9%84%20%D8%AC%D8%A7%D8%A6%D8%B2%D8%A9%20%D9%86%D8%B7%D8%A8%D8%B9%20%D8%B3%D8%B7%D8%B1%20%D9%8A%D8%AD%D8%AA%D9%88%D9%8A%20%D8%B9%D9%84%D9%89%20%D9%86%D8%B5%20%D9%88%D9%86%D9%88%D8%B9%20%D9%85%D8%AC%D8%A7%D9%84%20%D8%A7%D9%84%D8%AC%D8%A7%D8%A6%D8%B2%D8%A9%20%D9%88%D8%A7%D9%84%D8%B9%D8%A7%D9%85%20%D8%A7%D9%84%D8%AA%D9%8A%20%D8%B5%D8%AF%D8%B1%D8%AA%20%D9%81%D9%8A%D9%87%0A%20%20%20%20%20%20%20%20print((%22%25s%22%2Bi%5B%22category%22%5D%2B%22%25s%22%2Bi%5B%22year%22%5D)%20%25%20(%22The%20winners%20of%20%22%2C%22%20prize%20for%20year%22))%0A%20%20%20%20%20%20%20%20%23%D9%84%D9%83%D9%84%20%D8%AC%D8%A7%D8%A6%D8%B2%D8%A9%20%D9%82%D8%AF%20%D9%8A%D9%83%D9%88%D9%86%20%D9%87%D9%86%D8%A7%D9%83%20%D8%A7%D9%83%D8%AB%D8%B1%20%D9%85%D9%86%20%D9%81%D8%A7%D8%A6%D8%B2%D8%8C%20%D9%86%D8%B3%D8%AA%D8%AE%D8%AF%D9%85%20%D8%AD%D9%84%D9%82%D8%A9%20%D8%AA%D9%83%D8%B1%D8%A7%D8%B1%20%D9%84%D9%84%D9%85%D8%B1%D9%88%D8%B1%20%D8%B9%D9%84%D9%89%20%D9%83%D9%84%20%D9%81%D8%A7%D8%A6%D8%B2%20%D9%88%D9%86%D8%B7%D8%A8%D8%B9%20%D8%A7%D8%B3%D9%85%D9%87%0A%20%20%20%20%20%20%20%20%23%D9%86%D8%B3%D8%AA%D8%AE%D8%AF%D9%85%20%D9%87%D9%86%D8%A7%20%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%AB%D9%86%D8%A7%D8%A1%20%D9%84%D9%88%D8%AC%D9%88%D8%AF%20%D8%A8%D8%B9%D8%B6%20%D8%A7%D9%84%D8%AC%D9%88%D8%A7%D8%A6%D8%B2%20%D8%A7%D9%84%D8%AA%D9%8A%20%D9%84%D9%8A%D8%B3%20%D9%84%D9%87%D8%A7%20%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA%20%D9%83%D8%A7%D9%85%D9%84%D8%A9%20(%D9%84%D9%86%20%D9%86%D8%B7%D8%A8%D8%B9%D9%87%D8%A7)%20%D9%84%D8%B9%D8%AF%D9%85%20%D9%88%D8%AC%D9%88%D8%AF%D9%87%D8%A7%20%D8%A3%D8%B3%D8%A7%D8%B3%D9%8B%D8%A7%0A%20%20%20%20%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20x%20in%20i%5B%22laureates%22%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20print(%22%20%20%20%22%2Bx%5B%22firstname%22%5D%2B%22%20%22%2Bx%5B%22surname%22%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20except%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pass%0A%20%20%20%20%20%20%20%20except%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20pass%0A%0AurlData%20%3D%20%22http%3A%2F%2Fapi.nobelprize.org%2Fv1%2Fprize.json%22%0AwebUrl%20%3D%20urllib.request.urlopen(urlData)%0Aprint(webUrl)%0Aif%20(webUrl.getcode()%20%3D%3D%20200)%3A%0A%20%20%20%20data%20%3D%20webUrl.read()%0A%20%20%20%20count_years(data)%0A%20%20%20%20%23print_names(data)%0Aelse%3A%0A%20%20%20%20print%20(%22Error%20codde%3A%22%20%2B%20str(webUrl.getcode()))%0A” message=”” highlight=”” provider=”manual”/]