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

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

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

חילוץ נתון ממחרוזת JSON - אקסס

מתוזמן נעוץ נעול הועבר תכנות
9 פוסטים 3 כותבים 226 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    ארי
    כתב ב נערך לאחרונה על ידי
    #1

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

    {
    	"meta": {
    		"id": "IDREF2232d456-2a97-43fd-8dda-921bebed16c8",
    		"prepared": "2023-01-05T15:30:43",
    		"test": false,
    		"datasetId": "a8e45406-dcaf-4418-a21d-3228709d25f0",
    		"sender": {
    			"id": "UNKNOWN"
    		},
    		"receiver": {
    			"id": "guest"
    		},
    		"links": [{
    			"rel": "self",
    			"href": "/data/dataflow/BOI.STATISTICS/EXR/1.0/RER_USD_ILS?endperiod=2023-01-06&format=sdmx-json&startperiod=2023-01-01",
    			"uri": "https://raw.githubusercontent.com/sdmx-twg/sdmx-json/develop/structure-message/tools/schemas/1.0/sdmx-json-structure-schema.json"
    		}]
    	},
    	"data": {
    		"dataSets": [{
    			"links": [{
    				"rel": "dataflow",
    				"urn": "urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=BOI.STATISTICS:EXR(1.0)"
    			}],
    			"action": "Information",
    			"series": {
    				"0:0:0:0:0:0": {
    					"attributes": [0, 0, 0, 0, 0, null],
    					"observations": {
    						"0": ["3.532"],
    						"1": ["3.527"],
    						"2": ["3.529"]
    					}
    				}
    			}
    		}],
    		"structure": {
    			"links": [{
    				"rel": "dataflow",
    				"urn": "urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=BOI.STATISTICS:EXR(1.0)"
    			}, {
    				"rel": "datastructure",
    				"urn": "urn:sdmx:org.sdmx.infomodel.datastructure.DataStructure=BOI.STATISTICS:EXR(1.0)"
    			}],
    			"name": "שערי חליפין",
    			"names": {
    				"he": "שערי חליפין"
    			},
    			"dimensions": {
    				"dataset": [],
    				"series": [{
    					"id": "SERIES_CODE",
    					"name": "שם סדרה",
    					"keyPosition": 0,
    					"role": null,
    					"values": [{
    						"id": "RER_USD_ILS",
    						"name": "שער יציג דולר ארה\"ב - שקל"
    					}]
    				}, {
    					"id": "FREQ",
    					"name": "תדירות",
    					"keyPosition": 1,
    					"role": null,
    					"values": [{
    						"id": "D",
    						"name": "יומי"
    					}]
    				}, {
    					"id": "BASE_CURRENCY",
    					"name": "מטבע בסיס",
    					"keyPosition": 2,
    					"role": null,
    					"values": [{
    						"id": "USD",
    						"name": "דולר ארה\"ב"
    					}]
    				}, {
    					"id": "COUNTER_CURRENCY",
    					"name": "מטבע נגדי",
    					"keyPosition": 3,
    					"role": null,
    					"values": [{
    						"id": "ILS",
    						"name": "ש\"ח"
    					}]
    				}, {
    					"id": "UNIT_MEASURE",
    					"name": "יחידות מידה",
    					"keyPosition": 4,
    					"role": null,
    					"values": [{
    						"id": "ILS",
    						"name": "ש\"ח"
    					}]
    				}, {
    					"id": "DATA_TYPE",
    					"name": "סוג נתון",
    					"keyPosition": 5,
    					"role": null,
    					"values": [{
    						"id": "OF00",
    						"name": "שער יציג"
    					}]
    				}],
    				"observation": [{
    					"id": "TIME_PERIOD",
    					"name": "Time period",
    					"description": "The period of time or point in time to which the measured observation refers.",
    					"keyPosition": 6,
    					"role": "time",
    					"values": [{
    						"start": "2023-01-03T00:00:00",
    						"end": "2023-01-03T23:59:59",
    						"id": "2023-01-03",
    						"name": "2023-01-03"
    					}, {
    						"start": "2023-01-04T00:00:00",
    						"end": "2023-01-04T23:59:59",
    						"id": "2023-01-04",
    						"name": "2023-01-04"
    					}, {
    						"start": "2023-01-05T00:00:00",
    						"end": "2023-01-05T23:59:59",
    						"id": "2023-01-05",
    						"name": "2023-01-05"
    					}]
    				}]
    			},
    			"attributes": {
    				"dataset": [],
    				"series": [{
    					"id": "DATA_SOURCE",
    					"name": "מקור נתונים",
    					"relationship": {
    						"dimensions": ["SERIES_CODE", "FREQ", "BASE_CURRENCY", "COUNTER_CURRENCY", "UNIT_MEASURE"]
    					},
    					"role": null,
    					"values": [{
    						"id": "BOI_MRKT",
    						"name": "בנק ישראל - חטיבת השווקים"
    					}]
    				}, {
    					"id": "TIME_COLLECT",
    					"name": "אופן חישוב בתקופת זמן",
    					"relationship": {
    						"dimensions": ["SERIES_CODE", "FREQ", "BASE_CURRENCY", "COUNTER_CURRENCY", "UNIT_MEASURE"]
    					},
    					"role": null,
    					"values": [{
    						"id": "V",
    						"name": "אחר"
    					}]
    				}, {
    					"id": "CONF_STATUS",
    					"name": "סיווג סודיות",
    					"relationship": {
    						"dimensions": ["SERIES_CODE", "FREQ", "BASE_CURRENCY", "COUNTER_CURRENCY", "UNIT_MEASURE"]
    					},
    					"role": null,
    					"values": [{
    						"id": "F",
    						"name": "לא סודי"
    					}]
    				}, {
    					"id": "PUB_WEBSITE",
    					"name": "פרסום באתר",
    					"relationship": {
    						"dimensions": ["SERIES_CODE", "FREQ", "BASE_CURRENCY", "COUNTER_CURRENCY", "UNIT_MEASURE"]
    					},
    					"role": null,
    					"values": [{
    						"id": "Y",
    						"name": "כן"
    					}]
    				}, {
    					"id": "UNIT_MULT",
    					"name": "מכפיל יחידות",
    					"relationship": {
    						"dimensions": ["SERIES_CODE", "FREQ", "BASE_CURRENCY", "COUNTER_CURRENCY", "UNIT_MEASURE"]
    					},
    					"role": null,
    					"values": [{
    						"id": "0",
    						"name": "יחידות"
    					}]
    				}, {
    					"id": "COMMENTS",
    					"name": "הערות",
    					"relationship": {
    						"dimensions": ["SERIES_CODE", "FREQ", "BASE_CURRENCY", "COUNTER_CURRENCY", "UNIT_MEASURE"]
    					},
    					"role": null,
    					"values": []
    				}],
    				"observation": []
    			}
    		}
    	}
    }
    

    כעת אני מנסה לחלץ את הנתונים שנמצאים בערך "observations" (ליתר דיוק את הערך האחרון שיש שם), אני ממיר את הJSON עם JsonConverter.ParseJson אבל אני לא מצליח לגשת לנתונים האלו.
    ניסיתי משהו כמו ("data")("dataSets")("series")("0:0:0:0:0:0")("observations")("2"), אבל חוזר לי שגיאה על זה.
    מישהו יודע מה אני צריך לכתוב בשביל להגיע אליהם?
    תודה!

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

      @ארי פספסת שהdataSets הוא מערך. אז צריך להוסיף שמה (1) כדי לגשת לראשון.

      ("data")("dataSets")(1)("series")("0:0:0:0:0:0")("observations")("2")(1)
      

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

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

        @dovid לא עוזר.
        הקוד שלי הוא כך:

        Dim str As String
        Dim Json As Object
        Dim element As Variant
        
        str = SendGet("https://edge.boi.gov.il/FusionEdgeServer/sdmx/v2/data/dataflow/BOI.STATISTICS/EXR/1.0/RER_USD_ILS?startperiod=2023-01-01&endperiod=2023-01-06&format=sdmx-json")
        
        Set Json = JsonConverter.ParseJson(str)
        For Each element In Json
            Debug.Print element("data")("dataSets")(1)("series")("0:0:0:0:0:0")("observations")("2")
        Next element
        

        ואני מקבל שגיאה
        bdb7eadf-ea99-4730-98fc-04d0a48839e8-image.png
        תודה.

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

          @ארי ברור שהקוד שלך לא יעבוד. תבין מה קיבלת: עבור כל אובייקט בתוך ה-JSON, פונקציית ParseJson ממיר אותו ל"אוסף" (collection).
          זה מתחיל מהשורש של ה-JSON שהוא אובייקט עם שתי מפתחות: "meta", ו-"data", אז קיבלת collection עם שני ערכים.
          מכיון שכל ערך של האובייקט הנ"ל הוא בעצמו אובייקט, לכן גם ב-collection שקיבלת, כל ערך ממנו הוא בעצמו collection. וכן הלאה וכן הלאה.
          כאשר אתה עובר בלולאה על ה-collection הראשי, אתה מקבל את שני ה-collections שנמצאים ברמה השנייה של ה-JSON כל אחד בתורו. לאובייקטים אלו אין מפתח בשם "data" לכן הקוד שלך נכשל.

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

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

            @yossiz כתב בחילוץ נתון ממחרוזת JSON - אקסס:

            @ארי ברור שהקוד שלך לא יעבוד. תבין מה קיבלת: עבור כל אובייקט בתוך ה-JSON, פונקציית ParseJson ממיר אותו ל"אוסף" (collection).
            זה מתחיל מהשורש של ה-JSON שהוא אובייקט עם שתי מפתחות: "meta", ו-"data", אז קיבלת collection עם שני ערכים.
            מכיון שכל ערך של האובייקט הנ"ל הוא בעצמו אובייקט, לכן גם ב-collection שקיבלת, כל ערך ממנו הוא בעצמו collection. וכן הלאה וכן הלאה.
            כאשר אתה עובר בלולאה על ה-collection הראשי, אתה מקבל את שני ה-collections שנמצאים ברמה השנייה של ה-JSON כל אחד בתורו. לאובייקטים אלו אין מפתח בשם "data" לכן הקוד שלך נכשל.

            אם התכוונת לעבור בלולאה על כל הערכים שבתוך ה-observation הרצוי (האחרון) אז הקוד הוא כך:

            For Each element In Json("data")("dataSets")(1)("series")("0:0:0:0:0:0")("observations")("2")
                Debug.Print element
            Next element
            

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

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

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

              @ארי כפי ש@yossiz אמר הלולאה מיותרת, ופלא שהשארת אותה.
              תחליף את הקוד הזה:

              Set Json = JsonConverter.ParseJson(str)
              For Each element In Json
                  Debug.Print element("data")("dataSets")(1)("series")("0:0:0:0:0:0")("observations")("2")
              Next element
              

              בקוד הזה:

              Set Json = JsonConverter.ParseJson(str)
              Debug.Print Json("data")("dataSets")(1)("series")("0:0:0:0:0:0")("observations")("2")
              

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

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

                @dovid לא עובד... 😞

                17e2283a-0504-45fc-87b8-74dc09304b6a-image.png

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

                  @ארי כי העתקתי מהקוד שלך במקום מהתשובה לעיל שלי (ה1 בסוף, כי גם הערך הסופי הינו מערך בעל איבר בודד).

                  Set Json = JsonConverter.ParseJson(str)
                  Debug.Print Json("data")("dataSets")(1)("series")("0:0:0:0:0:0")("observations")("2")(1)
                  
                  

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

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

                    @dovid תודה!
                    עובד מצוין!!!
                    שבת שלום.

                    תגובה 1 תגובה אחרונה
                    0

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

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

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