
id, name, price.true, false או null.JsonFileManager עם סיומת .json, ועדיין FileWriter, כי JSON הוא טקסט.JSONArray. לכל מוצר יוצרים JSONObject ומוסיפים אליו עם put את id, name, price, ואז מוסיפים את האובייקט למערך.jsonArray.toString().StringBuilder ו-BufferedReader בלולאה על כל שורה (JSON יכול להיות מחולק לכמה שורות), עם append של השורה ושל \n. בסוף מסירים את ה-\n האחרון עם deleteCharAt.new JSONArray(fileContent.toString()).length() עם getJSONObject(i), ומתוכו getInt("id"), getString("name"), getDouble("price"). בונים Product ומוסיפים לרשימה, ומחזירים אותה.הטקסט המלא של הדקות הראשונות בהרצאה «Save Collection to JSON File» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הפורמט הבא שאנחנו הולכים לראות לצורך שמירת מידע וטעינת מידע זה בעצם פורמט שנקרא Json. Json זה קיצור של JavaScript Object Notation, וזה בעצם פורמט לייצוג אובייקטים ומערכים שנכתב לראשונה ב-JavaScript ותפס כפורמט טקסטואלי בצורה נרחבת בהמון פרויקטים ומערכות וחברות בכל העולם.
המטרה של ג'ייסון זה פשוט לתאר מידע בקובץ טקסטואלי ממש כמו ש-XML יכול לבצע. אבל ג'ייסון הוא פורמט שהוא הרבה יותר מצומצם מ-XML, ולכן ג'ייסון משמש בכדי לקחת מידע ולשלוח אותו על גבי רשת כלשהי, לדוגמה רשת האינטרנט, בין קליינט לבין סרבר ובחזרה מסרבר לקליינט.
אנחנו בונים אפליקציה שרצה על מכשיר אנדרואיד ולכן אנחנו נחשבים קליינט. אם אנחנו רוצים לקחת מידע ולשלוח אותו לסרבר, אנחנו רוצים שהמידע הזה יהיה כמה שיותר קטן ולכן נהוג שהמידע שנשלח יהיה בפורמט ג'ייסון ולא בפורמט xml שהוא יותר מנופח.
דבר ראשון, אנחנו בדוגמה הזאת הולכים לשמור קובץ ג'ייסון רק בכדי לראות איך אנחנו מסוגלים גם לשמור וגם לקרוא פורמט ג'ייסוני.
בהמשך כאשר אנחנו נגיע לאפליקציות שמסוגלות לשלוח מידע לרשת או לקבל מידע מהרשת אנחנו שוב נשתמש עם הפורמט הזה עם פורמט הג'ייסון בכדי לשלוח או לקבל נתונים משרת מרוחק. הדבר הראשון שחשוב לבצע זה לראות מה בדיוק הפורמט של הג'ייסון ואפילו להשוות אותו לפורמט ה-XML.
אז בואו לצורך הדוגמה נצרף קובץ, נקרא לו טסט, ונגיד, אוקיי, הוא לא רוצה שנקרא לו טסט כי כבר יש שם כזה, אבל בואו נקרא לו טסט 2, נראה האם יש לנו פה ג'ייסון איפשהו.
הנה אנחנו רואים פורמט ג'ייסון, בואו נבצע אוקיי, והנה אנחנו רואים שיש לנו פה קובץ עם פורמט ג'ייסון שאנחנו יכולים לכתוב לתוכו מידע.
איך כותבים מידע ג'ייסוני? אז אם אנחנו כותבים אובייקט אנחנו פשוט כותבים סוגריים מסולסלים ובתוכם את המאפיינים של האובייקט.
לדוגמה יש לנו ID מאפיין אמור להיות בגרשיים, לאחר מכן נקודותיים ולאחר מכן ערך. פסיק, מאפיין הבא name, נקודותיים, ערך, מאפיין הבא price, נקודותיים, שכחתי רק את הגרשיים, נקודותיים וערך.
אם הערך הוא מספרי, הוא לא חייב להיות בתוך גרשיים. הערכים יכולים להיות או מכרוזות או מספרים שלמים או עשרוניים או true או false או נאלים.
יש לנו פה מגוון ערכים שיכולים להיות עבור המאפיינים השונים. אם אני רוצה לשמור מערך, אז מערך נשמר בסוגריים מרובעים. זאת אומרת שבקובץ יכול להיות או סוגריים מרובעים עם ערכים בתוכם, או סוגריים מסוסנים כאובייקט.
אם אנחנו רוצים לשמור מערך של אובייקטים, אז אין בעיה לשים סוגריים מרובעים ובתוכם את הערכים השונים. בואו רגע נעשה דבר כזה, יש לנו פה אובייקט ראשון, יש לנו אובייקט שני, יש לנו אובייקט שלישי, נחליף רק את הערכים בכדי שהדוגמה הזאת תהיה דומה לדוגמה עם ה-XML.
היה לנו פה בננה והיה לנו פה איזשהו מספר ועכשיו אנחנו יכולים לראות מי בעצם יותר מצומצם שימו לב כמה ה-XML תופס וכמה ה-JSON תופס ב-XML עבור כל מאפיין יש לנו פתיחה ויש לנו סגירה עבור JSON יש לנו רק פתיחה אין לנו את הסגירה אז בעצם יש לנו כאן פורמט יותר מצומצם ואנחנו
רוצים כרגע במקום ה-XML ליצור את הפורמט הזה. אז בואו נשים את זה פה בצד, נחזור בחזרה לדוגמה שלנו ובמקום לכתוב xml בואו נכתוב json.
json הוא גם כן פורמט טקסטואלי ולכן הפייל רייטר מתאים לנו. אנחנו רוצים עכשיו במקום הכתיבה של ה-xml אנחנו רוצים לכתוב ל-json אז בואו ניפטר מכל אלו, נבוא לפה ונייצר לעצמנו איזשהו JSON הריי, מחלקה שקיימת בג'אווה והיא מאפשרת להשתמש במערך JSON ולייצג מערך JSON.
בואו ניצור אובייקט חדש מ-JSON הריי, ואנחנו קודם כל רוצים להוסיף את כל המוצרים שקיבלנו לתוך ה-JSON הריי הזה. אז בואו נרוץ פה ב-foreach שוב פעם, יש לנו פה product p בתוך אוסף המוצרים שלנו, נשים את זה באותה שורה שזה יהיה יותר אסתטי, ומה שאנחנו רוצים לעשות זה מקור לאחד מהמוצרים ליצור json object,
אז בואו נבנה פה אובייקט json object, הנה יש לנו פה אובייקט json object חדש, ואנחנו רוצים להוסיף אליו את המאפיינים. אז הנה ה-json object, ועל ידי פונקציית put אנחנו אומרים, הנה מאפיין ראשון והוא נקרא ID והערך שלו זה p.getID, נשכפל, יש לנו כאן name וזה יהיה p.getName, יש לנו פה price, זה יהיה p.getPrice וסיימנו לבנות בעצם אובי
אקט. אנחנו רוצים לגשת ל-JSON array שלנו ולהוסיף את ה-JSON Object שיצרנו. זה יהיה בעצם הוספה של האובייקט למערך. בואו אולי נגדיר כאן איזה שהם הערות בכדי ממש להבין מה הערכים שהוספנו לגבי כל אחד ואחד מהם.
יש לנו פה את ה-Price, זה היה השלישי, ולבסוף הוספנו את כל האובייקט הזה למערך כולו. המערך עכשיו של ה-JSON מחזיק לנו את כל המידע הזה שאנחנו רואים, וכל מה שאנחנו צריכים לעשות זה לבוא ל-FileWriter ולרשום את ה-String של הכל.
זה יהיה 2-String עבור המערך הזה. והנה סיימנו לבנות את המידע לגבי קובץ ה-JSON. בואו כבר נגיע לקריאה של המידע מקובץ ה-JSON.
אז אין לנו כאן את כל מה שהיה קשור מקודם ל-XML, בואו ניפטר מזה. מה שאנחנו רוצים לעשות זה לקרוא את המידע הזה כטקסט אחד ולשרשר את זה למחרוזת אחת ארוכה, קודם כל.
עשינו את זה בעבר על ידי StringBuilder. בואו נבנה פה file-content-venue-string-builder. לאחר מכן יש לנו one-line לצורך קריאת שורה אחת מהקובץ.
הנה buffer-reader שלנו, בוא תקרא לי בבקשה שורה. יכול להיות שהקובץ שלנו בנוי מכמה שורות, למרות שזה לא אמור להיות המצב כרגע, אבל הרבה פעמים קורה ש-JSON מחולק לכמה שורות עם אנטרים, זה יכול להיות מסמך שהוא טקסטואלי, הרי זה מסמך טקסטואלי, אז יכול להיות שבאיזשהו level הורדנו את זה
בטעות או לא בטעות שורה, ולכן מבחינתנו יכול להיות כמה שורות בקובץ. אז מה שאנחנו רוצים לעשות זה לרוץ בלולאה כל עוד one line ולא null. מה שאנחנו רוצים לעשות זה file content append one line, פייל קונטנט append backslash n, כלומר אותו הדבר שיש לנו בקובץ אנחנו לוקחים אלינו.
one line שווה buffered reader נקודה read line וניפטר מהאנטר האחרון, זה היה פייל קונטנט נקודה delete char at פייל קונטנט length פחות אחד ויש לנו עכשיו בתוך פייל קונטנט בדיוק מה שהיה בתוך הקובץ.
מה שאנחנו רוצים לעשות עכשיו זה להמיר הכל ל-JSON הרי, כי אנחנו יודעים שהקובץ הזה מחזיק מערך JSON. בואו נפתח פה: JSON הרי שווה New JSON הרי, והקונסטרקטור שלו מקבל את כל המחרוזת.
עכשיו, אם יש לנו את כל המידע הזה כ-JSON הרי, אנחנו יכולים לרוץ עליו בלולאת for רגילה. כל עוד i קטן מ-json array length, מה שאנחנו רוצים לעשות זה לשלוף json object מתוכו.
זה יהיה json array.get json object במיקום i. נשלוף מתוך האובייקט את הפריטים עצמם. אני מזכיר, אנחנו רוצים לקחת את התוכן של הקובץ שזה פורמט json-י, לייצר ממנו מערך של product שזה הרייליסט של product אז אנחנו חייבים לשלוף את המידע