מבוא לסכימת JSON בג'אווה

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

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

ה סכמת JSON המפרט מחולק לשלושה חלקים:

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

2. הגדרת סכמת JSON

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

להלן פשוט אובייקט JSON המייצג קטלוג מוצרים:

{"id": 1, "name": "אהיל", "price": 0}

נוכל להגדיר את זה סכמת JSON כדלקמן:

{"$ schema": "//json-schema.org/draft-04/schema#", "title": "Product", "description": "מוצר מהקטלוג", "type": "object" , "properties": {"id": {"description": "המזהה הייחודי למוצר", "type": "מספר שלם"}, "name": {"description": "שם המוצר", " type ":" string "}," price ": {" type ":" number "," minimum ": 0," exclusiveMinimum ": true}}," חובה ": [" id "," name "," price "]}

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

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

  • ה סכמת $ מילת המפתח קובעת כי סכמה זו נכתבת על פי מפרט טיוטת v4.
  • ה כותרת ו תיאור מילות המפתח הן תיאוריות בלבד בכך שהן אינן מוסיפות אילוצים לנתונים המאומתים. כוונת הסכימה נקבעת בשתי מילות המפתח הללו: מתאר מוצר.
  • ה סוּג מילת מפתח מגדיר את האילוץ הראשון על שלנו ג'סון נתונים: זה צריך להיות א אובייקט JSON.

כמו כן, סכימת JSON עשויה להכיל מאפיינים שאינם מילות מפתח לסכימה. במקרה שלנו תְעוּדַת זֶהוּת, שֵׁם, מחיריהיו חברים (או נכסים) של אובייקט JSON.

עבור כל נכס, אנו יכולים להגדיר את סוּג. הגדרנו תְעוּדַת זֶהוּת ו שֵׁם כפי ש חוּטו מחיר כפי ש מספר. ב סכמת JSON מספר יכול להיות מינימלי. כברירת מחדל מינימום זה כולל, ולכן עלינו לציין בלעדי מינימום.

סוף - סוף, ה סכֵימָה מספר את זה תְעוּדַת זֶהוּת, שֵׁם, ו מחיר הם נדרש.

3. אימות באמצעות סכמת JSON

עם שלנו סכמת JSON לשים במקום אנחנו יכולים לאמת שֶׁלָנוּ אובייקט JSON.

ישנן ספריות רבות לביצוע משימה זו. לדוגמא שלנו, בחרנו בספריית Java json-schema.

קודם כל, עלינו להוסיף את התלות הבאה שלנו pom.xml:

 org.everit.json org.everit.json.schema 1.3.0 

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

בטל ציבורי @Test givenInvalidInput_whenValidating_thenInvalid () זורק ValidationException {JSONObject jsonSchema = JSONObject חדש (JSONTokener חדש (JSONSchemaTest.class.getResourceAsStream ("/ schema.json"))); JSONObject jsonSubject = JSONObject חדש (JSONTokener חדש (JSONSchemaTest.class.getResourceAsStream ("/ product_invalid.json"))); סכמת סכמה = SchemaLoader.load (jsonSchema); schema.validate (jsonSubject); }

במקרה זה, נזרק ValidationException יצביע על #/מחיר. אם תסתכל על המסוף היא תדפיס את הפלט הבא:

מחיר / מחיר: 0.0 אינו גבוה מ- 0 

המבחן השני נראה כדלקמן:

@Test הציבור בטל givenValidInput_whenValidating_thenValid () זורק ValidationException {JSONObject jsonSchema = JSONObject חדש (JSONTokener חדש (JSONSchemaTest.class.getResourceAsStream ("/ schema.json"))); JSONObject jsonSubject = JSONObject חדש (JSONTokener חדש (JSONSchemaTest.class.getResourceAsStream ("/ product_valid.json"))); סכמת סכמה = SchemaLoader.load (jsonSchema); schema.validate (jsonSubject); }

מכיוון שאנו משתמשים בתוקף אובייקט JSON, לא תיזרק שגיאת אימות.

4. מסקנה

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

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

מקרה מבחן פשוט של מאמר זה ניתן למצוא בפרויקט GitHub.