דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. JSON

JSON

מתוזמן נעוץ נעול הועבר תכנות
16 פוסטים 7 כותבים 533 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • P מנותק
    P מנותק
    ps
    כתב ב נערך לאחרונה על ידי
    #1

    אני עובדת בימים אלו על כתיבת REST API עם פונקציונליות של CRUD
    יש לי בעיה שאני לא בטוחה מה הדרך הנכונה והנקיה לפתור אותה
    יש לי אובייקט עם הרבה שדות, שאני רוצה לאפשר עידכון רק לחלק מהשדות, בלי הצורך לשלוח JSON אם אובייקט שלם, אלא רק עם השדות שמעונינים לעדכן.
    בנוסף יש שדות שיכולים לקבל את הערך NULL
    כאן אני בבעיה איך אפשר להבדיל ערך שלא מופיע ב-JSON, שאני לא מעוניינת לעדכן, לבין ערך שאני רוצה לעדכן אותו ל-NULL
    כאשר ה-JSON מתורגם לאובייקט, ערך שלא מופיע ב-JSON גם כן מופיע כ-NULL

    אודה לרעיונות!

    clickoneC תגובה 1 תגובה אחרונה
    0
    • clickoneC מנותק
      clickoneC מנותק
      clickone
      השיב לps ב נערך לאחרונה על ידי
      #2

      @ps
      לדעתי אפשר להשתמש בפורמט
      בתור התחלה, ראו כאן
      https://www.newtonsoft.com/json/help/html/NullValueHandlingIgnore.htm

      Person person = new Person
      {
          Name = "Nigal Newborn",
          Age = 1
      };
      
      string jsonIncludeNullValues = JsonConvert.SerializeObject(person, Formatting.Indented);
      
      Console.WriteLine(jsonIncludeNullValues);
      // {
      //   "Name": "Nigal Newborn",
      //   "Age": 1,
      //   "Partner": null,
      //   "Salary": null
      // }
      
      string jsonIgnoreNullValues = JsonConvert.SerializeObject(person, Formatting.Indented, new JsonSerializerSettings
      {
          NullValueHandling = NullValueHandling.Ignore
      });
      
      Console.WriteLine(jsonIgnoreNullValues);
      // {
      //   "Name": "Nigal Newborn",
      //   "Age": 1
      // }
      
      

      אין טסט כמו פרודקשן.

      המייל שלי urivpn@gmail.com

      תגובה 1 תגובה אחרונה
      1
      • yossizY מנותק
        yossizY מנותק
        yossiz
        כתב ב נערך לאחרונה על ידי yossiz
        #3

        @clickone או שלא הבנתי נכון את השאלה או שלא הבנתי את הפתרון שלך,

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

        var obj = JSON.parse(jsonMessage);
        if (obj.property_a) db.update(obj.property_a);
        ...
        

        אז מפספסים מקרה שהלקוח ביקש עדכון של property_a ל-null
        ואם הבנתי נכון את השאלה, אז התשובה לכאורה פשוטה:

        if obj.hasOwnProperty('property_a')  db.update(obj.property_a);
        

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

        תגובה 1 תגובה אחרונה
        2
        • yossizY מנותק
          yossizY מנותק
          yossiz
          כתב ב נערך לאחרונה על ידי
          #4

          למעשה, כנראה שלא הבנתי את השאלה, כי שדה שלא קיים מחזיר undefined לעומת שדה עם ערך של null שמחזיר null

          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

          clickoneC תגובה 1 תגובה אחרונה
          1
          • clickoneC מנותק
            clickoneC מנותק
            clickone
            השיב לyossiz ב נערך לאחרונה על ידי
            #5

            @yossiz
            היא עושה SerializeObject לאובייקט ממשי, ולא לאובייקט וירטואלי שיכול לקבל כל ערך.
            אלא יש שם כבר פרופרטיז, והSerializeObject ממיר את זה אוטומטית.

            ואני רציתי ללכת בכיוון שאם השדה לא נמצא אז שלא ייכנס, או שיהיה שם ערך קבוע (לדוגמא אם זה שדה מספרי שהערך הולידי שלו הוא מעל אפס, שיהיה שם -1 ואז לבדוק אם זה שווה -1 ואז להמשיך וכו)

            אבל לכאורה אפשר לזרום גם עם הרעיון שלך

            public static bool HasProperty(this object obj, string propertyName)
            {
                return obj.GetType().GetProperty(propertyName) != null;
            }
            
            

            מול אובייקט לא מוגדר
            ואז פשוט לבדוק אם הפרופרטי קיים שם.

            מקור לכיוון
            https://stackoverflow.com/questions/15341028/check-if-a-property-exist-in-a-class

            אין טסט כמו פרודקשן.

            המייל שלי urivpn@gmail.com

            yossizY תגובה 1 תגובה אחרונה
            2
            • yossizY מנותק
              yossizY מנותק
              yossiz
              השיב לclickone ב נערך לאחרונה על ידי
              #6

              @clickone אהה, לא שמתי לב שאתה בכלל ב-#C... ואני דיברתי JS.
              חכם עדיף מנביא,
              למה לא לכתוב ברור בשאלה על איזה שפה מדובר ( @ps )?

              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

              clickoneC תגובה 1 תגובה אחרונה
              3
              • clickoneC מנותק
                clickoneC מנותק
                clickone
                השיב לyossiz ב נערך לאחרונה על ידי
                #7

                @yossiz
                רוב השאלות שלה זה בC#. לכן הנחתי שזו השפה.

                חבל רק שהיא שאלה את השאלה, ולא באה לבדוק אם מישהו הגיב.... 😞

                אין טסט כמו פרודקשן.

                המייל שלי urivpn@gmail.com

                מ תגובה 1 תגובה אחרונה
                4
                • מ מנותק
                  מ מנותק
                  מעמד
                  השיב לclickone ב נערך לאחרונה על ידי
                  #8

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

                  clickoneC תגובה 1 תגובה אחרונה
                  2
                  • clickoneC מנותק
                    clickoneC מנותק
                    clickone
                    השיב למעמד ב נערך לאחרונה על ידי clickone
                    #9

                    @מעמד
                    2. זה לא הייתה שאלה של משהו מיידי / דחוף, אלא שאלה כללית איך לתכנן. בהחלט גם אם יענו על זה רק לאחר יום זה יהיה רלבנטי בשבילה.

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

                    אין טסט כמו פרודקשן.

                    המייל שלי urivpn@gmail.com

                    מ תגובה 1 תגובה אחרונה
                    1
                    • מ מנותק
                      מ מנותק
                      מעמד
                      השיב לclickone ב נערך לאחרונה על ידי מעמד
                      #10

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

                      ח תגובה 1 תגובה אחרונה
                      2
                      • ח מנותק
                        ח מנותק
                        חוקר
                        השיב למעמד ב נערך לאחרונה על ידי
                        #11

                        @מעמד אמר בJSON:

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

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

                        מ תגובה 1 תגובה אחרונה
                        3
                        • מ מנותק
                          מ מנותק
                          מעמד
                          השיב לחוקר ב נערך לאחרונה על ידי
                          #12

                          @חוקר את זה @clickone צריך לראות

                          clickoneC תגובה 1 תגובה אחרונה
                          2
                          • clickoneC מנותק
                            clickoneC מנותק
                            clickone
                            השיב למעמד ב נערך לאחרונה על ידי
                            #13

                            @מעמד
                            אוקיי
                            חוזר בי 😮
                            תודה על ההארה

                            אין טסט כמו פרודקשן.

                            המייל שלי urivpn@gmail.com

                            תגובה 1 תגובה אחרונה
                            3
                            • P מנותק
                              P מנותק
                              ps
                              כתב ב נערך לאחרונה על ידי ps
                              #14

                              תודה רבה על התגובות! (היה יום הזיכרון ויום העצמאות..)

                              את ה-API, אני כותבת בשפת scala, אבל נראה לי שהבעיה גם קיימת ב-java
                              כאשר ה-json עובר deserialization לאובייקט, שני המצבים הבאים יקבלו ערך null:

                              1. key ששלחנו לו ערך Null
                              2. key שלא שלחנו בכלל
                                אני לא רוצה לוותר על האפשרות לעשות deserialization לאובייקט, בגלל שזה נותן לי בלי מאמץ וולידציות לסוגי הערכים שנשלחים.

                              חשבתי אולי משהו בכיוון הזה - אבל לא בדקתי את זה עד הסוף: להשתמש deserialization לאובייקט רק בשביל הוולידציה, אבל אח"כ להמיר את זה לרשימה של key value list (זה אפשרי??), ולכתוב פונקציה שבונה sql update statement של כל הערכים ברשימה.

                              1. אני לא יודעת אם אפשרי להמיר json ל-key value list
                              2. איך אדע איזה מהם עמודת ה-ID בשביל ה-where statement

                              עוד פיתרון שחשבתי, אבל הר"צ לא כ"כ אהב
                              ערך שאני רוצה לעדכן כ-null, אשלח אותו כמחרוזת "null" וארשום טיפול מיוחד במחרוזת הזאת

                              תגובה 1 תגובה אחרונה
                              2
                              • מ מנותק
                                מ מנותק
                                מזדמן
                                כתב ב נערך לאחרונה על ידי
                                #15

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

                                תגובה 1 תגובה אחרונה
                                0
                                • upsilon01U מנותק
                                  upsilon01U מנותק
                                  upsilon01
                                  כתב ב נערך לאחרונה על ידי
                                  #16

                                  לא בטוח שזה קשור,
                                  אבל צריך לשים לב שיש null ויש Null
                                  Null זה מאפיין
                                  null זה ערך

                                  תגובה 1 תגובה אחרונה
                                  1
                                  • dovidD dovid העביר נושא זה מ-תכנות ב-

                                  בא תתחבר לדף היומי!
                                  • התחברות

                                  • אין לך חשבון עדיין? הרשמה

                                  • התחברו או הירשמו כדי לחפש.
                                  • פוסט ראשון
                                    פוסט אחרון
                                  0
                                  • דף הבית
                                  • קטגוריות
                                  • פוסטים אחרונים
                                  • משתמשים
                                  • חיפוש
                                  • חוקי הפורום