מבוא ל- JSON-Java (org.json)

1. מבוא ל- JSON-Java

JSON (ראשי תיבות של JavaScript Object Notation) הוא פורמט החלפת נתונים קל משקל והוא הנפוץ ביותר לתקשורת שרת לקוח. קל לקריאה / כתיבה ובלתי תלוי בשפה. ערך JSON יכול להיות JSON אחר אובייקט, מערך, מספר, מחרוזת, בוליאני (נכון / לא נכון) או ריק.

במדריך זה נראה כיצד אנו יכולים ליצור, לתפעל ולנתח את JSON באמצעות אחת מספריות העיבוד הזמינות של JSON, כלומר ספריית JSON-Java ידועה גם בשם org.json.

2. דרישה מראש

לפני שנתחיל, נצטרך להוסיף את התלות הבאה שלנו pom.xml:

 org.json json 20180130 

ניתן למצוא את הגרסה האחרונה במאגר Maven Central.

שים לב שחבילה זו כבר נכללה ב- Android SDK, לכן אנו לא צריכים לכלול אותה תוך שימוש באותו.

3. JSON ב- Java [חבילה org.json]

ספריית JSON-Java ידועה גם בשם org.json (לא להתבלבל עם org.json.simple של גוגל) מספק לנו שיעורים המשמשים לניתוח ולניפול JSON ב- Java.

יתר על כן, ספרייה זו יכולה גם להמיר בין JSON, XML, כותרות HTTP, קובצי Cookie, רשימת מופרדים באמצעות פסיקים או טקסט וכו '.

במדריך זה, נסתכל על:

  1. JSONObject - דומה למוצא ג'אווה מַפָּה כמו אובייקט המאחסן זוגות ערכי מפתח לא מסודרים
  2. JSON מערך - רצף מסודר של ערכים הדומים ליישום הווקטור המקורי של ג'אווה
  3. JSONT טוקר - כלי המפרק פיסת טקסט לסדרה של אסימונים אשר יכולים לשמש JSONObject אוֹ JSON מערך לנתח את מיתרי JSON
  4. CDL - כלי המספק שיטות להמרת טקסט המופרד באמצעות פסיקים ל- JSON מערך ולהיפך
  5. עוגייה - ממיר מ JSON חוּט לעוגיות ולהיפך
  6. HTTP - משמש להמרה מ- JSON חוּט לכותרות HTTP ולהיפך
  7. JSONException - זה חריג סטנדרטי שנזרק על ידי ספרייה זו

4. JSONObject

א JSONObject הוא אוסף לא מסודר של צמדי מפתח וערך, הדומה למקורו של ג'אווה מַפָּה יישומים.

  • המפתחות הם ייחודיים מיתרים זה לא יכול להיות ריק
  • ערכים יכולים להיות כל דבר מ- בוליאני, מספר, חוּט, JSON מערך או אפילו א JSONObject.NULL לְהִתְנַגֵד
  • א JSONObject יכול להיות מיוצג על ידי א חוּט כלוא בתוך סוגריים מתולתלים עם מקשים וערכים המופרדים על ידי נקודתיים, וזוגות מופרדים בפסיק
  • יש בו כמה בונים שבאמצעותם ניתן לבנות א JSONObject

הוא תומך גם בשיטות העיקריות הבאות:

  1. קבל (מפתח מחרוזת) - זזורק את האובייקט המשויך למפתח שסופק JSONException אם המפתח לא נמצא
  2. opt (מפתח מחרוזת) - זזה האובייקט המשויך למפתח שסופק, ריק אחרת
  3. לשים (מפתח מחרוזת, ערך אובייקט) - מכניס או מחליף צמד ערכי מפתח בזרם JSONObject.

ה לָשִׂים() שיטה היא שיטה עמוסה המקבלת מפתח מסוג חוּט ומספר סוגים לערך.

לרשימת השיטות המלאה הנתמכת על ידי JSONObject, בקר בתיעוד הרשמי.

בואו נדון כעת בכמה מהפעולות העיקריות הנתמכות על ידי מעמד זה.

4.1. יצירת JSON ישירות מ JSONObject

JSONObject חושף ממשק API דומה לזה של Java מַפָּה מִמְשָׁק. אנחנו יכולים להשתמש ב- לָשִׂים() שיטה וספק את המפתח והערך כטענה:

JSONObject jo = JSONObject חדש (); jo.put ("שם", "jon doe"); jo.put ("גיל", "22"); jo.put ("עיר", "שיקגו");

עכשיו שלנו JSONObject ייראה כמו:

{"city": "chicago", "name": "jon doe", "age": "22"}

ישנן שבע חתימות עמוסות שונות של JSONObject.put () שיטה. המפתח אמנם יכול להיות ייחודי אך לא ריק חוּט, הערך יכול להיות כל דבר.

4.2. יצירת JSON ממפה

במקום להכניס ישירות מפתח וערכים לא JSONObject, אנו יכולים לבנות מנהג מַפָּה ואז העבירו את זה כטיעון ל JSONObjectבונה.

דוגמה זו תניב את אותן התוצאות כמו לעיל:

מפת מפה = HashMap חדש (); map.put ("שם", "ג'ון איילה"); map.put ("גיל", "22"); map.put ("עיר", "שיקגו"); JSONObject jo = JSONObject חדש (מפה);

4.3. יוצר JSONObject מבית JSON חוּט

לנתח JSON חוּט אל א JSONObjectאנחנו יכולים פשוט להעביר את חוּט לבנאי.

דוגמה זו תניב את אותן התוצאות כמו לעיל:

JSONObject jo = new JSONObject ("{\" city \ ": \" chicago \ ", \" name \ ": \" jon doe \ ", \" age \ ": \" 22 \ "}");

עבר חוּט הטיעון חייב להיות JSON תקף אחרת הקבלן הזה עשוי לזרוק JSONException.

4.4. סידור אובייקט Java ל- JSON

אחד מ JSONObject 'הקבלנים לוקחים POJO כטיעון שלו. בדוגמה שלהלן, החבילה משתמשת בגטרים מה- DemoBean בכיתה ויוצר מתאים JSONObject לאותו דבר.

לקבל JSONObject מאובייקט Java, נצטרך להשתמש במחלקה שהיא שעועית Java תקפה:

DemoBean הדגמה = DemoBean חדש (); demo.setId (1); demo.setName ("לורם ipsum"); demo.setActive (נכון); JSONObject jo = JSONObject חדש (הדגמה);

ה JSON אובייקט ג'ו לדוגמא זו הולכת להיות:

{"name": "lorem ipsum", "active": true, "id": 1}

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

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

5. JSON מערך

א JSON מערך הוא אוסף ערכים מסודר, הדומה למקורו של ג'אווה וֶקטוֹר יישום.

  • ערכים יכולים להיות כל דבר מ- מספר, חוּט, בוליאני, JSON מערך, JSONObject או אפילו א JSONObject.NULL לְהִתְנַגֵד
  • זה מיוצג על ידי א חוּט עטוף בסוגריים מרובעים ומורכב מאוסף ערכים המופרד בפסיקים
  • כמו JSONObject, יש לו קונסטרוקטור שמקבל מקור חוּט ומנתח אותו לבניית א JSON מערך

להלן השיטות העיקריות של JSON מערך מעמד:

  1. קבל (אינדקס int) - rמקבע את הערך באינדקס שצוין (בין 0 לאורך הכולל - 1), אחרת זורק a JSONException
  2. opt (אינדקס int) - מחזיר את הערך המשויך לאינדקס (בין 0 לבין אורך כולל - 1). אם אין ערך באינדקס זה, אז ריק מוחזר
  3. לשים (ערך אובייקט) - להוסיף לזה ערך אובייקט JSON מערך. שיטה זו עמוסה יתר על המידה ותומכת במגוון רחב של סוגי נתונים

לקבלת רשימה מלאה של שיטות הנתמכות על ידי JSONArray, בקר בתיעוד הרשמי.

5.1. יוצר JSON מערך

לאחר שאותחלנו אובייקט JSONArray, נוכל פשוט להוסיף ולקבל אלמנטים באמצעות ה- לָשִׂים() ו לקבל() שיטות:

JSONArray ja = JSONArray חדש (); ja.put (בוליאני. TRUE); ja.put ("לורם איפסום"); JSONObject jo = JSONObject חדש (); jo.put ("שם", "ג'ון איילה"); jo.put ("גיל", "22"); jo.put ("עיר", "שיקגו"); ja.put (jo);

להלן התוכן שלנו JSON מערך(קוד מעוצב לשם בהירות):

[true, "lorem ipsum", {"city": "chicago", "name": "jon doe", "age": "22"}]

5.2. יוצר JSON מערך ישירות ממחרוזת JSON

כמו JSONObject ה JSON מערך יש גם קונסטרוקטור שיוצר אובייקט Java ישירות מ- JSON חוּט:

JSONArray ja = JSONArray חדש ("[נכון, \" לורם ipsum \ ", 215]");

קונסטרוקטור זה עשוי לזרוק א JSONException אם המקור חוּט אינו JSON חוקי חוּט.

5.3. יוצר JSON מערך ישירות מאוסף או מערך

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

אנחנו פשוט מעבירים אותם כוויכוח לבנאי וזה יחזיר א JSON מערך לְהִתְנַגֵד:

רשימת רשימה = ArrayList חדש (); list.add ("קליפורניה"); list.add ("טקסס"); list.add ("הוואי"); list.add ("אלסקה"); JSONArray ja = JSONArray חדש (רשימה);

עכשיו שלנו JSON מערך מכיל:

["קליפורניה", "טקסס", "הוואי", "אלסקה"]

6. JSONT טוקר

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

יתכן שלא יהיו הרבה מצבים בהם נשתמש ישירות בכיתה זו מכיוון שניתן להשיג את אותה פונקציונליות בשיטות פשוטות אחרות (כמו string.toCharArray ()):

JSONTokener jt = JSONTokener חדש ("לורם"); בעוד (jt.more ()) {Log.info (jt.next ()); }

כעת אנו יכולים לגשת אל JSONT טוקר כמו איטרטר, באמצעות יותר() שיטה לבדוק אם ישנם אלמנטים שנותרו ו הַבָּא() כדי לגשת לאלמנט הבא.

האסימונים שהתקבלו מהדוגמה הקודמת יהיו:

l o r e m

7. CDL

אנו מספקים CDL (רשימת פסיקים מופרדת) בכיתה להמיר טקסט מופרד בפסיקים לא JSON מערך ולהיפך.

7.1. הפקה JSON מערך ישירות מהטקסט המופרד באמצעות פסיקים

על מנת לייצר א JSON מערך ישירות מהטקסט המופרד בפסיקים, אנו יכולים להשתמש בשיטה הסטטית rowToJSONArray () שמקבל א JSONT טוקר:

JSONArray ja = CDL.rowToJSONArray (JSONTokener חדש ("אנגליה, ארה"ב, קנדה");

שֶׁלָנוּ JSON מערך מורכב כעת מ:

["אנגליה", "ארה"ב", "קנדה"]

7.2. הפקת טקסט מופרד באמצעות פסיקים מ- JSONArray

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

JSONArray ja = JSONArray חדש ("[\" אנגליה \ ", \" ארה"ב \ ", \" קנדה \ "]"); מחרוזת cdt = CDL.rowToString (ja);

ה חוּטcdt מכיל כעת:

אנגליה, ארה"ב, קנדה

7.3. הפקה JSON מערך שֶׁל JSONObjects שימוש בטקסט מופרד באמצעות פסיקים

לייצר א JSON מערך שֶׁל JSONObjects, נשתמש בטקסט חוּט המכיל גם כותרות וגם נתונים המופרדים בפסיקים.

הקווים השונים מופרדים באמצעות החזרת מרכבה (\ r) או הזנת קו (\ n).

השורה הראשונה מתפרשת כרשימת כותרות וכל השורות הבאות מתייחסות כאל נתונים:

מחרוזת מחרוזת = "שם, עיר, גיל \ n" + "ג'ון, שיקגו, 22 \ n" + "גארי, פלורידה, 35 \ n" + "סל, וגאס, 18"; תוצאת JSONArray = CDL.toJSONArray (מחרוזת);

האובייקט JSON תוצאת מערך מורכב כעת מ (פלט מעוצב לשם הבהירות):

[{"name": "john", "city": "chicago", "age": "22"}, {"name": "gary", "city": "florida", "age": "35 "}, {" name ":" sal "," city ":" vegas "," age ":" 18 "}]

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

קווים שונים מופרדים באמצעות החזרת מרכבה (\ r) או הזנת קו (\ n):

JSONArray ja = JSONArray חדש (); ja.put ("שם"); ja.put ("עיר"); ja.put ("גיל"); מחרוזת מחרוזת = "john, chicago, 22 \ n" + "gary, florida, 35 \ n" + "sal, vegas, 18"; תוצאת JSONArray = CDL.toJSONArray (ja, מחרוזת);

כאן נקבל את תוכן האובייקט תוֹצָאָה בדיוק כמו קודם.

8. עוגיה

ה עוגייה בכיתה עוסקת בקובצי Cookie של דפדפן האינטרנט ויש לו שיטות להמיר קובץ Cookie לדפדפן JSONObject ולהיפך.

להלן השיטות העיקריות של עוגייה מעמד:

  1. toJsonObject (מקור מחרוזת קוקי) - ממיר מחרוזת עוגיות ל- JSONObject

  2. toString (JSONObject jo) - זה הפוך מהשיטה הקודמת, ממיר א JSONObject לתוך עוגיה חוּט.

8.1. המרת עוגיה חוּט לתוך JSONObject

להמרת עוגיה חוּט אל א JSONObject, השתמש היטב בשיטה הסטטית Cookie.toJSONObject ():

עוגיית מחרוזת = "שם משתמש = ג'ון דו; תפוג = יום ה ', 18 בדצמבר 2013 12:00:00 UTC; path = /"; JSONObject cookieJO = Cookie.toJSONObject (עוגיה);

8.2. המרת א JSONObject לתוך העוגיה חוּט

עכשיו נמיר א JSONObject לעוגיה חוּט. זה הפוך מהשלב הקודם:

עוגיית מחרוזת = Cookie.toString (cookieJO);

9. HTTP

ה HTTP class מכיל שיטות סטטיות המשמשות להמרת כותרות HTTP ל- JSONObject ולהיפך.

לשיעור זה יש גם שתי שיטות עיקריות:

  1. toJsonObject (מקור מחרוזת HttpHeader) - ממיר א מחרוזת HttpHeader ל JSONObject
  2. toString (JSONObject jo) - ממיר את המסופק JSONObject ל חוּט

9.1. ממיר JSONObject לכותרת HTTP

HTTP.toString () השיטה משמשת להמרת JSONObject לכותרת HTTP חוּט:

JSONObject jo = JSONObject חדש (); jo.put ("שיטה", "POST"); jo.put ("בקשה-URI", "//www.example.com/"); jo.put ("גרסת HTTP", "HTTP / 1.1"); מחרוזת httpStr = HTTP.toString (jo);

הנה, שלנו מחרוזת httpStr יורכב מ:

POST "//www.example.com/" HTTP / 1.1

שים לב שבעת המרת כותרת בקשת HTTP, ה- JSONObject חייב להכיל "שיטה","בקשה-URI" ו "גרסת HTTP" מקשים, ואילו עבור כותרת התגובה, האובייקט חייב להכיל "גרסת HTTP","קוד סטטוס" ו "ביטוי סיבה" פרמטרים.

9.2. המרת כותרת HTTP חוּט בחזרה ל JSONObject

כאן נמיר את מחרוזת ה- HTTP שקיבלנו בשלב הקודם חזרה לממש JSONObject שיצרנו בשלב זה:

JSONObject obj = HTTP.toJSONObject ("POST \" // www.example.com/ \ "HTTP / 1.1");

10. JSONException

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

זה משמש בכל הכיתות מהחבילה הזו. אחרי החריג יוצא בדרך כלל הודעה המציינת מה בדיוק השתבש.

11. מסקנה

במדריך זה בדקנו JSON באמצעות Java - org.json - והתמקדנו בכמה מתפקידי הליבה הזמינים כאן.

קטעי הקוד המלאים המשמשים במאמר זה ניתן למצוא באתר GitHub.