PracticU

Save Collection to JSON File

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Save Collection to JSON File
מילון מושגים:
JSON - פורמט טקסט קריא לייצוג נתונים מובְנים כזוגות מפתח-ערך, נפוץ להחלפת מידע בין שרת ללקוח.
JavaScript - שפת תכנות שרצה בעיקר בדפדפן ומוסיפה אינטראקטיביות לדפי אינטרנט. רצה גם בצד השרת באמצעות Node.js.
מערך - מבנה נתונים שמאחסן אוסף ערכים מאותו סוג ברצף, שאפשר לגשת אליהם לפי מספר מיקום (אינדקס).
XML - שפת סימון לייצוג נתונים מובְנים בעזרת תגיות, המשמשת להחלפת מידע בין מערכות ולקובצי הגדרות.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
מאפיין - תכונה שמצמידים לרכיב ומתארת אותו או את התנהגותו, למשל מאפיין של תגית HTML או שדה באובייקט.
לולאה - מבנה בקרה שחוזר על קטע קוד שוב ושוב כל עוד תנאי מתקיים או עבור כל פריט באוסף.
בינארי - ייצוג מידע בבסיס 2 בעזרת הספרות 0 ו-1. גם קובץ הכולל קוד מכונה ולא טקסט קריא.

Save Collection to JSON File
JSON (קיצור של JavaScript Object Notation) הוא פורמט טקסטואלי לייצוג אובייקטים ומערכים, מצומצם יותר מ-XML. לכן הוא מתאים לשליחת מידע ברשת בין לקוח לשרת. בשיעור שומרים בו את אוסף המוצרים וטוענים אותו, וגם משווים אותו ל-XML.
הפורמט
1. אובייקט: סוגריים מסולסלים עם מאפיינים בגרשיים, נקודותיים וערך, מופרדים בפסיקים: id, name, price.
2. ערכים: מחרוזות, מספרים שלמים או עשרוניים (בלי גרשיים), true, false או null.
3. מערך: סוגריים מרובעים. מערך של אובייקטים הוא רשימה של אובייקטים בתוכם.
4. השוואה ל-XML: ב-XML לכל מאפיין יש פתיחה וסגירה, וב-JSON רק פתיחה, ולכן הוא קטן יותר.
כתיבה
1. הכנה: JsonFileManager עם סיומת .json, ועדיין FileWriter, כי JSON הוא טקסט.
2. בנייה: יוצרים JSONArray. לכל מוצר יוצרים JSONObject ומוסיפים אליו עם put את id, name, price, ואז מוסיפים את האובייקט למערך.
3. שמירה: כותבים לקובץ את jsonArray.toString().
קריאה
1. קריאת הטקסט: StringBuilder ו-BufferedReader בלולאה על כל שורה (JSON יכול להיות מחולק לכמה שורות), עם append של השורה ושל \n. בסוף מסירים את ה-\n האחרון עם deleteCharAt.
2. המרה: new JSONArray(fileContent.toString()).
3. פירוק: לולאה על length() עם getJSONObject(i), ומתוכו getInt("id"), getString("name"), getDouble("price"). בונים Product ומוסיפים לרשימה, ומחזירים אותה.
בדיקה והשוואת גודל
אחרי הוספת מוצרים, יציאה והרצה מחדש, הנתונים נטענו. קובץ ה-XML מהשיעור הקודם היה 361 בתים, וקובץ ה-JSON עם אותם נתונים 128 בתים.
שימו לב
צריך לוודא שהסיומת והשם של הקובץ שונו, כי בהתחלה הקוד עדיין התייחס לקובץ XML.
בהמשך הקורס, באפליקציות ששולחות ומקבלות נתונים מרשת, נשתמש שוב ב-JSON.
כעת אפשר לשמור collection לקובץ בארבע דרכים: טקסט, בינארי, XML ו-JSON, ולבחור לפי הצורך.

פרקי ההרצאה: Save Collection to JSON File

  1. 00:00

    מהו פורמט JSON

  2. 00:48

    JSON להעברת מידע בין קליינט לסרבר

  3. 02:04

    כתיבת אובייקט ומערך ב-JSON

  4. 04:21

    השוואת גודל JSON מול XML

  5. 05:03

    בניית JSONArray ו-JSONObject

  6. 07:35

    כתיבת המערך לקובץ

  7. 08:15

    קריאת הקובץ עם StringBuilder

  8. 10:07

    המרת התוכן ל-JSONArray

תמלול ההרצאה: Save Collection to JSON File

הטקסט המלא של הדקות הראשונות בהרצאה «Save Collection to JSON File» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

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

  2. 00:33

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

  3. 01:04

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

  4. 01:27

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

  5. 01:38

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

  6. 02:04

    אז בואו לצורך הדוגמה נצרף קובץ, נקרא לו טסט, ונגיד, אוקיי, הוא לא רוצה שנקרא לו טסט כי כבר יש שם כזה, אבל בואו נקרא לו טסט 2, נראה האם יש לנו פה ג'ייסון איפשהו.

  7. 02:24

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

  8. 02:36

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

  9. 02:46

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

  10. 03:08

    אם הערך הוא מספרי, הוא לא חייב להיות בתוך גרשיים. הערכים יכולים להיות או מכרוזות או מספרים שלמים או עשרוניים או true או false או נאלים.

  11. 03:27

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

  12. 03:45

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

  13. 04:12

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

  14. 04:43

    רוצים כרגע במקום ה-XML ליצור את הפורמט הזה. אז בואו נשים את זה פה בצד, נחזור בחזרה לדוגמה שלנו ובמקום לכתוב xml בואו נכתוב json.

  15. 05:00

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

  16. 05:35

    בואו ניצור אובייקט חדש מ-JSON הריי, ואנחנו קודם כל רוצים להוסיף את כל המוצרים שקיבלנו לתוך ה-JSON הריי הזה. אז בואו נרוץ פה ב-foreach שוב פעם, יש לנו פה product p בתוך אוסף המוצרים שלנו, נשים את זה באותה שורה שזה יהיה יותר אסתטי, ומה שאנחנו רוצים לעשות זה מקור לאחד מהמוצרים ליצור json object,

  17. 06:07

    אז בואו נבנה פה אובייקט json object, הנה יש לנו פה אובייקט json object חדש, ואנחנו רוצים להוסיף אליו את המאפיינים. אז הנה ה-json object, ועל ידי פונקציית put אנחנו אומרים, הנה מאפיין ראשון והוא נקרא ID והערך שלו זה p.getID, נשכפל, יש לנו כאן name וזה יהיה p.getName, יש לנו פה price, זה יהיה p.getPrice וסיימנו לבנות בעצם אובי

  18. 06:50

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

  19. 07:20

    יש לנו פה את ה-Price, זה היה השלישי, ולבסוף הוספנו את כל האובייקט הזה למערך כולו. המערך עכשיו של ה-JSON מחזיק לנו את כל המידע הזה שאנחנו רואים, וכל מה שאנחנו צריכים לעשות זה לבוא ל-FileWriter ולרשום את ה-String של הכל.

  20. 07:51

    זה יהיה 2-String עבור המערך הזה. והנה סיימנו לבנות את המידע לגבי קובץ ה-JSON. בואו כבר נגיע לקריאה של המידע מקובץ ה-JSON.

  21. 08:07

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

  22. 08:25

    עשינו את זה בעבר על ידי StringBuilder. בואו נבנה פה file-content-venue-string-builder. לאחר מכן יש לנו one-line לצורך קריאת שורה אחת מהקובץ.

  23. 08:43

    הנה buffer-reader שלנו, בוא תקרא לי בבקשה שורה. יכול להיות שהקובץ שלנו בנוי מכמה שורות, למרות שזה לא אמור להיות המצב כרגע, אבל הרבה פעמים קורה ש-JSON מחולק לכמה שורות עם אנטרים, זה יכול להיות מסמך שהוא טקסטואלי, הרי זה מסמך טקסטואלי, אז יכול להיות שבאיזשהו level הורדנו את זה

  24. 09:07

    בטעות או לא בטעות שורה, ולכן מבחינתנו יכול להיות כמה שורות בקובץ. אז מה שאנחנו רוצים לעשות זה לרוץ בלולאה כל עוד one line ולא null. מה שאנחנו רוצים לעשות זה file content append one line, פייל קונטנט append backslash n, כלומר אותו הדבר שיש לנו בקובץ אנחנו לוקחים אלינו.

  25. 09:45

    one line שווה buffered reader נקודה read line וניפטר מהאנטר האחרון, זה היה פייל קונטנט נקודה delete char at פייל קונטנט length פחות אחד ויש לנו עכשיו בתוך פייל קונטנט בדיוק מה שהיה בתוך הקובץ.

  26. 10:14

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

  27. 10:36

    עכשיו, אם יש לנו את כל המידע הזה כ-JSON הרי, אנחנו יכולים לרוץ עליו בלולאת for רגילה. כל עוד i קטן מ-json array length, מה שאנחנו רוצים לעשות זה לשלוף json object מתוכו.

  28. 11:00

    זה יהיה json array.get json object במיקום i. נשלוף מתוך האובייקט את הפריטים עצמם. אני מזכיר, אנחנו רוצים לקחת את התוכן של הקובץ שזה פורמט json-י, לייצר ממנו מערך של product שזה הרייליסט של product אז אנחנו חייבים לשלוף את המידע

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: Save Collectoin to XML File

ההרצאה הבאה: חיבור למסד נתונים SQLite - חלק 1

הרצאות קשורות מקורסים אחרים

  • JSON
  • מה זה JSON
  • יצירת Collection
  • הגדרת Query Collection

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון