התבוסס על מקרה של org.json.JSONObject

1. הקדמה

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

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

2. חידוד דרך א JSONObject

נתחיל עם המקרה הפשוט של איטרציה של JSON של זוגות ערך-שם:

{"name": "Cake", "cakeId": "0001", "cakeShape": "Heart"}

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

handle handleJSONObject (JSONObject jsonObject) {jsonObject.keys (). forEachRemaining (key -> {Object value = jsonObject.get (key); logger.info ("Key: {0} \ tValue: {1}", key, value) );}}

והתפוקה שלנו תהיה:

מפתח: שם ערך: עוגה מפתח: עוגה ערך ערך: 0001 מפתח: עוגה ערך צורה: לב

3. חוצה דרך א JSONObject

אבל בואו נגיד שיש לנו מבנה מורכב יותר:

{"batters": [{"type": "Regular", "id": "1001"}, {"type": "Chocolate", "id": "1002"}, {"type": "BlueBerry" , "id": "1003"}], "name": "עוגה", "cakeId": "0001"}

מה המשמעות של איטרציה דרך המקשים במקרה זה?

בואו נסתכל על מה הנאיבי שלנו מקשים () גישה תתן לנו:

מפתח: batters ערך: [{"type": "רגיל", "id": "1001"}, {"type": "שוקולד", "id": "1002"}, {"type": "BlueBerry" , "id": "1003"}] מפתח: שם ערך: עוגה מפתח: ערך עוגה: 0001

זה אולי לא ממש מועיל. זה נראה כמו מה אנו רוצים במקרה זה לא איטרציה, אלא מעבר.

חוצה דרך א JSONObject שונה מאיטרציה דרך א JSONObjectערכת המפתחות.

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

void handleValue (ערך אובייקט) {if (ערך מופע של JSONObject) {handleJSONObject ((JSONObject) ערך); } אחרת אם (ערך ערך של JSONArray) {handleJSONArray ((JSONArray) ערך); } אחר {logger.info ("ערך: {0}", ערך); }}

ואז, הגישה שלנו עדיין דומה למדי:

handle handleJSONObject (JSONObject jsonObject) {jsonObject.keys (). forEachRemaining (key -> {Object value = jsonObject.get (key); logger.info ("Key: {0}", key); handleValue (value);} ); }

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

4. חוצה דרך א JSON מערך

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

handled בטל JSONArray (JSONArray jsonArray) {jsonArray.iterator (). forEachRemaining (element -> {handleValue (element)}); }

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

5. מסקנה

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

כמובן, זו הייתה שיטת מעבר ראשונה לעומק, אבל יכולנו לעשות רוחב ראשון בדרך דומה.

הקוד השלם לדוגמא זמין ב- Github.


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