3 min. read

פרק קודם:

פייתון 12 - קבצים בינאריים

מה נלמד

  • פורמט JSON
  • כיצד לעבוד עם קבצי JSON בפייתון

JSON - Javascript Object Notation

JSON הוא פורמט מילוני המכיל תכונות עם ערכים.
ערכים יכולים להיות מסוגים שונים - מספרים, בוליאנים, טקסט, מערכים ואובייקטים פנימיים.

חוקים

אובייקטים מוגדרים בעזרת סוגריים מסולסלים - { }.
הפורמט בנוי בתצורת עץ ויכול להכיל ערכים פנימיים.
כל אובייקט Json הוא מילון שמכיל מפתחות וערכים.

השורש - ההתחלה יכול להיות אובייקט או רשימה, ז”א להתחיל ב-[] או {}.

כל תכונה נעטפת בגרשיים - "property".

תכונה וערך מופרדים בעזרת נקודותיים "key":"val".

ערכים מופרדים בעזרת פסיקים "key":"val","key2":"val2"

ערכים טקסטואלים מכילים גרשיים - "value".

null הוא ערך ריק הנכתב ללא גרשיים.

רשימות בנויות בעזרת סוגריים מרובעים [1,2,3].

אובייקטים פנימיים מוגדרים בעזרת סוגריים מסולסלים { "root": { "child": {}}}

קבצים המכילים את הפורמט מקבצים את ההרחבה .json.
עורכי טקסט כמו Vs Code יודעים לערוך את הקבצים האלו ולהציג אותם בצורה נוחה.

דוגמא

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"name":"Bob",
"age": 43,
"alive": true,
"address":{
"city":"Tel-Aviv",
"address": "Ibn Gabirol 55"
},
"phone-numbers": [
"053-68381X1",
"054-8Y50606"
],
"additional-info": null
}

Json כמידע

הפורמט מתבסס על תצורה מילונית ההופך אותו לקריא מאוד.
הקריאות והקלות של הפורמט ביססו אותו כפורמט פופולרי בקרב מתכנתים ומשומש בתצורות רבות כיום- בשרתים, במסדי נתונים, במערכות אינדוקס ועוד!

בזכות הפופולריות הפורמט משומש לא רק כקבצים אלה גם כפורמט להעביר מידע!

RFC

ה-RFC הוא מסמך המתאר בצורה מדויקת סטנדרטים.
JSON הוא סטנדרט לתצוגה של אובייקטים בצורה טקסטואלית.
https://datatracker.ietf.org/doc/html/rfc7159

בשביל מה RFC?

הסיבה לזה - RFC.
המסמכים האלו עוזרים לנו לבדוק תקינות של מערכת - כי הם כתובים בצורה כזו שאומרת בדיוק מה צריך לקרות.

בהינתן ספריית json - אנחנו יכולים לוודא אם היא תקינה או לא.
אם הספרייה לא יכולה להמיר מערכים של מחרוזות - היא לא תקינה.

ועוד סיבה זה כדי לבדוק תמיכה - האם הסטנדרט תומך בתכונה שאנחנו רוצים או לא?

Json בפייתון

שימו לב שגם בפייתון ה - {} משמשים למילונים!
זה הופך את השימוש ב-JSON לפשוט!

בשביל להמיר לפורמט Json יש 2 פונקציות עיקריות:

  • json.dumps() - להמיר אובייקט למחרוזת
  • json.loads() - להמיר מחרוזת לאובייקט

המרת אובייקטים:

1
2
3
4
5
6
7
import json

info = { 'name':'Bob', 'age': 43}

infoStr = json.dumps(info)

print(infoStr)

כדי להדפיס Json יפה יותר ניתן להשתמש ב-indent=1 כפרמטר לפונקציה dumps.
הפרמטר מגדיר את הפורמט שבו ה-Json יודפס.
indent=1 מוסיף שורות חדשות - ככה שלא כל הפלט יהיה מאוד צפוף.

1
2
3
4
5
6
7
import json

info = { 'name':'Bob', 'age': 43}

infoStr = json.dumps(info, indent=1)

print(infoStr)

המרת מחרוזות:

1
2
3
4
5
6
7
import json

info = '{ "name" :"Bob", "age": 43}'

infoDict = json.loads(info)

print(infoDict['name'])

תרגיל

  1. כתבו קובץ ג’ייסון שמתאר קבוצה.
    לכל קבוצה יש:
  • שם קבוצה
  • חברי הקבוצה
  • מוטו
  • כתובת

לכל חבר קבוצה יש:

  • שם
  • גיל
  • תפקיד
  1. תכתבו תכנית העוברת על ימי השבוע ומקבלת מהמשתמש החלטה אם זה יום עבודה או יום חופש
    על התכנית להדפיס את ימי השבוע על המסך בפורמט JSON.
  • שימו לב - תמדלו את התצורה של ה-json לפני שאתם כותבים את הקוד!
    למשל - רשימה של אובייקטים כשלכל אובייקט יש את שם היום והגדרה שלו.
  1. מצאו את המוצר עם ההפרש הגדול ביותר בין המחיר הגבוה ביותר שלו, למחיר הנמוך ביותר שלו.
    למשל אם המחירים הם [1,2,3] אזי ההפרש הוא בין 3 ל-1.
    וההפרש יהיה 2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[
{
"product":"milk",
"prices":[1,2,1.2]
},
{
"product":"bread",
"prices":[4,6,12]
},
{
"product":"Oatmeal",
"prices":[15,25, 12.5]
},
{
"product":"Chicken",
"prices":[22,60,23,25]
}
]

לאחר שפתרתם נסו להוסיף עוד מוצרים!



בפרק הבא נלמד מה קורה כשהבלתי צפוי קורה!

פייתון 13 - שגיאות

אהבתם? מוזמנים להביע תמיכה כאן: כוס קפה