ניתוח פיתון JSON: מדריך פשוט

ניתוח פיתון JSON: מדריך פשוט

JSON (מייצג 'JavaScript Object Notation') הוא פורמט מבוסס טקסט המאפשר החלפת נתונים בין יישומים מגוונים. לדוגמה, יישום כתוב ב- C ++ הפעלה ב- Windows יכולה להחליף בקלות נתוני JSON באמצעות יישום שנכתב בפייתון ופועל על לינוקס. הפשטות והגמישות שלה הובילו לשימוש נרחב בשנים האחרונות, במיוחד בהעדפה לפורמטים מבוססי XML קודמים.





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





כמה דוגמאות JSON

הישות הנפוצה ביותר של JSON שתתקל בה היא לְהִתְנַגֵד : קבוצה של מיפויי ערך-מפתח בפורמט המוצג להלן.





חלונות 10 מתעורר מעצמו

person.json:

{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}

כך תוכל לייצג מערך אובייקטים. בייצוג זה, כל פריט במערך הוא אובייקט. להלן מדגם משכורות של שחקני בייסבול.



pays.json:

[ {
'year' : 1985,
'teamId' : 'ATL',
'leagueId' : 'NL',
'playerId' : 'barkele01',
'salary' : 870000
}, {
'year' : 1985,
'teamId' : 'ATL',
'leagueId' : 'NL',
'playerId' : 'bedrost01',
'salary' : 550000
} ]

כמובן, אתה יכול לייצג גם מערך של סקלרים. זה נראה כמו זה:





[
'hello',
'world',
35
]

ניתוח JSON ב- Python

פייתון מספק את json מודול שניתן להשתמש בו גם לנתח JSON, כמו גם ליצור JSON מאובייקטים ורשימות של פייתון.

קטע הקוד הבא מראה כיצד לפתוח קובץ JSON ולהעלות את הנתונים למשתנה.





import json
with open('sample.json', 'r') as fp:
obj = json.load(fp)

כאשר יש לך מחרוזת המכילה את נתוני JSON, תוכל להמיר אותם לאובייקט פייתון (או רשימה) בעזרת הדברים הבאים:

כיצד להעביר תמונות מטלפון סמסונג למחשב
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

כדי לנתח כתובת אתר JSON, תוכל ליצור אובייקט כתובת אתר באמצעות urllib2 ולהשתמש json.load () כמו קודם.

import urllib2, json
url = urllib2.urlopen('http://site.com/sample.json')
obj = json.load(url)

שגיאות טיפול

כאשר ל- JSON יש שגיאות, תקבל א ValueError . אתה יכול להתמודד עם זה ולנקוט צעדים מתקנים במידת הצורך.

try:
obj = json.loads('''{
'firstName': 'Alice',
'lastName: 'Hall',
'age': 35
}''')
except ValueError:
print('error loading JSON')

ניתוח JSON משורת הפקודה

לפעמים, כדאי לנתח את JSON באמצעות שורת הפקודה של פייתון, אולי כדי לבדוק אם יש שגיאות או להשיג פלט יפה.

cat glossary.json
# prints
{'glossary': {'GlossDiv': {'GlossList': {'GlossEntry': {'GlossDef': {'GlossSeeAlso': ['GML', 'XML'], 'para': 'A meta-markup language, used to create markup languages such as DocBook.'}, 'GlossSee': 'markup', 'Acronym': 'SGML', 'GlossTerm': 'Standard Generalized Markup Language', 'Abbrev': 'ISO 8879:1986', 'SortAs': 'SGML', 'ID': 'SGML'}}, 'title': 'S'}, 'title': 'example glossary'}}

כדי להשיג פלט כניסה מקובץ ה- JSON לעיל, תוכל לבצע את הפעולות הבאות:

python -mjson.tool glossary.json
# prints
{
'glossary': {
'GlossDiv': {
'GlossList': {
'GlossEntry': {
'Abbrev': 'ISO 8879:1986',
'Acronym': 'SGML',
'GlossDef': {
'GlossSeeAlso': [
'GML',
'XML'
],
'para': 'A meta-markup language, used to create markup languages such as DocBook.'
},
'GlossSee': 'markup',
'GlossTerm': 'Standard Generalized Markup Language',
'ID': 'SGML',
'SortAs': 'SGML'
}
},
'title': 'S'
},
'title': 'example glossary'
}
}

והנה איך אתה יכול לטעון את אובייקט JSON לפייתון ולחלץ רק את מה שאתה צריך.

python -c 'import json; fp = open('glossary.json', 'r'); obj = json.load(fp); fp.close(); print(obj['glossary']['title']')
# prints
example glossary

גישה לנתונים

לאחר שתטען את נתוני JSON במשתנה של פייתון, תוכל לגשת לנתונים כפי שהיית עושה לכל פייתון (או רשימה לפי העניין). לדוגמה, ניתן לגשת לנתוני JSON לעיל באופן הבא:

firstName = obj['firstName']
lastName = obj['Hall']
age = obj['age']

סוגי מידע

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

print(type(obj['firstName']), type(obj['lastName']), type(obj['age']))
# prints

טבלת ההמרות הבאה משמשת להמרה מ- JSON לפייתון.

ניתוח JSON באמצעות מחלקה מותאמת אישית

כברירת מחדל, אובייקט JSON הוא מנותח לתוך פייתון דיקט . לפעמים ייתכן שיהיה עליך ליצור אובייקט מהמחלקה שלך באופן אוטומטי מנתוני JSON. אתה יכול לעשות זאת על ידי ציון של אובייקט_קרס פונקציה המטפלת בהמרה. הדוגמה הבאה מראה כיצד.

להלן מחלקה מותאמת אישית המייצגת א אדם .

class Person:
def __init__(self, firstName, lastName, age):
self.firstName = firstName
self.lastName = lastName
self.age = age
def __str__(self):
return '{{'firstName' = '{0}','lastName' = '{1}', 'age' = {2}}}'.format(self.firstName, self.lastName, self.age)

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

person = Person('Crystal', 'Newell', 27)

כדי להשתמש בכיתה זו ליצירת מופעים בעת ניתוח JSON, אתה צריך אובייקט_קרס הפונקציה מוגדרת כך: הפונקציה מקבלת פייתון דיקט ומחזיר אובייקט מהמעמד הנכון.

def obj_creator(d):
return Person(d['firstName'], d['lastName'], d['age'])

עכשיו אתה יכול להשתמש בזה אובייקט_קרס פונקציה בעת הפעלת מנתח JSON.

with open('sample.json', 'r') as fp:
obj = json.load(fp, object_hook = obj_creator)
print(obj)
# prints
{'firstName' = 'Alice','lastName' = 'Hall', 'age' = 35}

דוגמאות לשימוש ב- JSON

JSON הוא מאוד פופולרי בימינו. אתרים רבים ויישומי SaaS (Software As A Service) מציעים פלט JSON שניתן לצרוך ישירות על ידי יישומים. כמה מהזמינים לציבור כוללים:

  • StackOverflow/StackExchange. הנה כתובת אתר שמחזירה רשימת שאלות בפורמט JSON.
  • GitHub מציעה ממשק API של JSON בכתובת https://developer.github.com/v3/.
  • והנה ה- API של Flickr: https://developer.yahoo.com/flickr/.

אם אתה מחפש דוגמאות נוספות לניצול טוב, עיין במדריך זה בניית בוט של מדיה חברתית באמצעות Python .

imessage ב- mac לא שולח הודעות

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

לַחֲלוֹק לַחֲלוֹק צִיוּץ אימייל האם כדאי לשדרג ל- Windows 11?

Windows עוצב מחדש. אבל האם זה מספיק כדי לשכנע אותך לעבור מ- Windows 10 ל- Windows 11?

קרא הבא
נושאים קשורים
  • תִכנוּת
  • תִכנוּת
  • פִּיתוֹן
על הסופר ג'יי סרידהאר(פורסמו 17 מאמרים) עוד מג'יי סרידהאר

הירשם לניוזלטר שלנו

הצטרף לניוזלטר שלנו לקבלת טיפים, סקירות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!

לחצו כאן להרשמה