הבריחה מחרוזת JSON בג'אווה

1. סקירה כללית

במדריך קצר זה נציג כמה דרכים להימלט ממחרוזת JSON ב- Java.

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

2. מה יכול להשתבש?

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

מטען מחרוזת = "{\" הודעה \ ": \" "+ הודעה +" \ "}"; sendMessage (מטען);

אבל, באמת, זה יכול להכניס בעיות רבות.

הפשוטה ביותר היא שההודעה מכילה הצעת מחיר:

{"message": "ההודעה" שלי "מפסיקה את json"}

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

שלום "," role ":" admin

ואז ההודעה הופכת:

{"message": "שלום", "role": "admin"}

הגישה הפשוטה ביותר היא להחליף ציטוטים ברצף הבריחה המתאים:

מטען מחרוזת = "{\" הודעה \ ": \" "+ הודעה.מקום (" \ "", "\" ") +" \ "}";

עם זאת, גישה זו שבירה למדי:

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

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

למרבה המזל, יש כמה ספריות עיבוד של JSON. בואו נסתכל במהירות על שלוש הפופולריות ביותר.

3. ספריית JSON-java

הספרייה הפשוטה והקטנה ביותר בסקירה שלנו היא JSON-java המכונה גם org.json.

כדי לבנות אובייקט JSON, אנחנו פשוט יוצרים מופע של JSONObject ובעצם להתייחס לזה כמו a מַפָּה:

JSONObject jsonObject = JSONObject חדש (); jsonObject.put ("הודעה", "שלום \" עולם \ ""); מטען מחרוזת = jsonObject.toString ();

זה יקח את הציטוטים סביב "העולם" וימלט מהם:

{"message": "שלום \" עולם \ ""}

4. ספריית ג'קסון

אחת מספריות הג'אווה הפופולאריות והגמישות ביותר לעיבוד JSON היא ג'קסון.

במבט הראשון, ג'קסון מתנהג באופן דומה ל org.json:

Params מפה = HashMap חדש (); params.put ("הודעה", "שלום \" עולם \ ""); מטען מחרוזת = ObjectMapper חדש (). WriteValueAsString (params);

עם זאת, ג'קסון יכול גם לתמוך בסידור אובייקטים של Java.

אז בואו נעלה את הדוגמה שלנו מעט על ידי גלישת המסר שלנו בכיתה מותאמת אישית:

class מטען {מטען מטען (הודעת מחרוזת) {this.message = הודעה; } הודעת מחרוזת; // גטרים וקובעים} 

ואז, אנו זקוקים למופע של ObjectMapper אליה נוכל להעביר מופע של האובייקט שלנו:

מטען מחרוזת = ObjectMapper חדש (). WriteValueAsString (מטען חדש ("שלום \" עולם \ "")); 

בשני המקרים, אנו מקבלים את אותה התוצאה כמו בעבר:

{"message": "שלום \" עולם \ ""}

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

5. ספריית גויאבה

Gson היא ספרייה מגוגל שלעתים קרובות הולכת ראש בראש עם ג'קסון.

אנחנו יכולים, כמובן, לעשות כפי שעשינו org.json שוב:

JsonObject json = JsonObject חדש (); json.addProperty ("הודעה", "שלום \" עולם \ ""); מטען מטען = Gson חדש (). ToJson (gsonObject);

או שאנחנו יכולים להשתמש באובייקטים מותאמים אישית, כמו אצל ג'קסון:

מטען מחרוזת = Gson חדש (). ToJson (מטען חדש ("שלום \" עולם \ ""));

ושוב נקבל את אותה התוצאה.

6. מסקנה

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

כל הקוד שקשור למאמר זה ניתן למצוא באתר Github.


$config[zx-auto] not found$config[zx-overlay] not found