שיעורי מודול (1/4)
JSON: הסדר וניתוח
JSON הוא פורמט חילופי הנתונים הנפוץ ביותר. מודול json ב
הספרייה הסטנדרטית מטפלת בזה באופן טבעי.
מ-Python ל-JSON: dumps
json.dumps(object) מסדרת אובייקט Python למחרוזת JSON.
import json
dati = {"nome": "Ada", "anni": 36, "skills": ["python", "matematica"]}
json.dumps(dati)
# '{"nome": "Ada", "anni": 36, "skills": ["python", "matematica"]}'
json.dumps(dati, indent=2, sort_keys=True)
# multi-line formatted string, keys sortedמ-JSON לפייתון: loads
json.loads(string) מנתח מחרוזת JSON ומחזירה אובייקטים של Python.
testo = '{"nome": "Ada", "anni": 36}'
d = json.loads(testo)
d["nome"] # 'Ada'
type(d) # <class 'dict'>סוג מיפוי
| JSON | פייתון |
|---|---|
object | dict |
array | list |
string | str |
number | int / float |
true | True |
false | False |
null | None |
מתוך קובץ: dump / load
with open("config.json", "w") as f:
json.dump(dati, f, indent=2)
with open("config.json") as f:
dati = json.load(f)ללא ה-s הנגררים הם עובדים על קבצים (דמוי קובץ), עם ה-s על מחרוזות.
סוגים שאינם ניתנים לסידרה: default
datetime, set, המחלקות המותאמות אישית שלך אינן ניתנות לסידרה כברירת מחדל:
import datetime, json
json.dumps({"ora": datetime.datetime.now()})
# TypeError: Object of type datetime is not JSON serializableאתה יכול להעביר פונקציה default שאומרת כיצד לשנות אותם:
def converti(obj):
if isinstance(obj, datetime.datetime):
return obj.isoformat()
if isinstance(obj, set):
return list(obj)
raise TypeError(f"non serializzabile: {type(obj)}")
json.dumps({"ora": datetime.datetime.now()}, default=converti)JSON ופעולות קבצים
הספרייה הסטנדרטית מספקת גם json.dump() וjson.load() (ללא ה-'s') כדי לכתוב ולקרוא נתוני JSON ישירות אל ומקבצים, תוך התאמה טבעית עם מנהלי הקשר:
with open("data.json", "w") as f:
json.dump(data, f)נסה את זה
בהינתן `data = {'nome': 'Ada', 'anni': 36}`, עשה אותו בסידרה ל-JSON עם indent=2 והקצה למשתנה `json_str`. הערך את 'json_str'.
הצג רמז
json.dumps(data, indent=2)
הפתרון זמין לאחר 3 ניסיונות
סקירת התרגיל
בהינתן מחרוזת JSON s = '[{"nome": "a", "v": 1}, {"nome": "b", "v": 2}]', נתח אותה עם json.loads לנתונים וחשב את סכום ערכי ה-'v' בסך הכל. הערכת סך הכל.
הצג רמז
json.loads מחזיר רשימה של dicts.
הפתרון זמין לאחר 3 ניסיונות
אתגר נוסף
בהינתן מחרוזת JSON \`json_data = '{"name": "Alice", "age": 30}'\`, פענח אותה למילון Python באמצעות \`json.loads\`. חלץ את הערך המשויך למפתח \`'name'\` ואחסן אותו ב-\`user_name\`. לבסוף, הערך את \`שם_משתמש\`.
הצג רמז
השתמש ב-json.loads(json_data) כדי לפענח, ולאחר מכן גש באמצעות נתונים['name'].
הפתרון זמין לאחר 3 ניסיונות