{"id":55001403,"date":"2023-02-01T00:00:00","date_gmt":"2023-06-17T09:32:01","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1403"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"JSONDaten_auslesen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/","title":{"rendered":"JSON-Daten auslesen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/d1880a13ae1048f19bd37d9c26b8e48c\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>F&uuml;r XML gibt es eine eigene Bibliothek zum Lesen und Schreiben der Inhalte eines XML-Dokuments. Bei JSON sieht das anders aus: Microsoft hat bisher keine Bibliothek bereitgestellt, mit der man komfortabel auf ein JSON-Dokument zugreifen kann. Wir wollen diesen Missstand zumindest ein wenig lindern. Es gibt bereits ein Modul, welches den Inhalt einer JSON-Datei in eine Art Objektmodell einliest, das von VBA aus wesentlich einfacher zu lesen ist. Dieses greifen wir in diesem Beitrag auf und zeigen, wie wir die Struktur der enthaltenen Daten erfassen und damit besser und systematisch auswerten k&ouml;nnen.<\/b><\/p>\n<h2>Fertiges JSON-Modul <\/h2>\n<p>Das in der Einleitung angesprochene JSON-Modul finden Sie unter dem folgenden Link zum Download vor:<\/p>\n<pre>https:\/\/github.com\/VBA-tools\/VBA-JSON<\/pre>\n<p>Es ist aber auch in der Beispieldatenbank zu diesem Beitrag enthalten. Dieses Modul stellt eine f&uuml;r uns interessante Funktion namens <b>ParseJSON<\/b> zur Verf&uuml;gung. Dieser &uuml;bergibt man den Inhalt des JSON-Dokuments und erh&auml;lt als Ergebnis ein Objekt des Typs <b>Dictionary <\/b>zur&uuml;ck. Damit wir dieses unter Verwendung von IntelliSense nutzen k&ouml;nnen, f&uuml;gen wir dem VBA-Projekt einen Verweis auf die Bibliothek <b>Microsoft Scripting Runtime <\/b>hinzu (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1403_001.png\" alt=\"Verweis auf die Bibliothek Microsoft Scripting Runtime\" width=\"424,5589\" height=\"334,6954\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Verweis auf die Bibliothek Microsoft Scripting Runtime<\/span><\/b><\/p>\n<h2>Beispieldokument<\/h2>\n<p>Als Beispieldokument verwenden wir eines, das wir bei <b>SelfHTML <\/b>unter folgender Adresse gefunden haben:<\/p>\n<pre>https:\/\/wiki.selfhtml.org\/wiki\/JSON<\/pre>\n<p>Dieses Dokument sieht wie in Bild 2 aus. Dieses Beispiel ist &uuml;brigens bereits so formatiert, dass es relativ gut lesbar ist und man seine Struktur erkennen kann. Die JSON-Daten, welche die meisten Webservice-APIs zur&uuml;ckliefern, kommen meist ohne Einr&uuml;ckungen und Zeilenumbr&uuml;che. Unser Beispiel w&uuml;rde dann etwa wie folgt aussehen:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_1403_002.png\" alt=\"Beispiel f&uuml;r ein JSON-Dokument\" width=\"424,5589\" height=\"392,2768\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Beispiel f&uuml;r ein JSON-Dokument<\/span><\/b><\/p>\n<pre>{\"name\":\"Georg\",\"alter\":47,\"verheiratet\":false,\"beruf\":null,\"kinder\":[{\"name\":\"Lukas\",\"alter\":19,\"schulabschluss\":\"Gymnasium\"},{\"name\":\"Lisa\",\"alter\":14,\"schulabschluss\":null}]}<\/pre>\n<p>Bereits diese kleine Datenmenge im JSON-Format ist f&uuml;r das menschliche Auge nicht gut lesbar.<\/p>\n<h2>JSON in ein Objektmodell &uuml;berf&uuml;hren<\/h2>\n<p>Nun haben wir weiter oben bereits die Funktion <b>ParseJSON <\/b>erw&auml;hnt, welche den Inhalt einer JSON-Datei in ein &uuml;bergeordnetes <b>Dictionary<\/b>-Objekt &uuml;berf&uuml;hrt. Dieses enth&auml;lt einfache Eigenschaften, also Name-Wert-Paare, weitere <b>Dictionary<\/b>-Objekte sowie <b>Collection<\/b>-Objekte.<\/p>\n<p>Das allein reicht eigentlich aus, um auf die Inhalte zuzugreifen. Das setzt allerdings voraus, dass man die Struktur kennt und wie man den Zugriff auf einzelne Elemente in der Struktur &#8211; oder auch auf mehrere Elemente unterhalb einer <b>Dictionary<\/b>&#8211; oder <b>Collection<\/b>-Auflistung &#8211; realisiert. Auf die einzelnen Werte des JSON-Beispiels k&ouml;nnen wir nach dem Eintragen in <b>objJSON <\/b>n&auml;mlich &uuml;ber die folgenden Ausdr&uuml;cke zugreifen:<\/p>\n<pre>objJSON.Item(\"name\")\r\nobjJSON.Item(\"alter\")\r\nobjJSON.Item(\"verheiratet\")\r\nobjJSON.Item(\"beruf\")\r\nobjJson.Item(\"kinder\").Item(1).Item(\"name\")\r\nobjJson.Item(\"kinder\").Item(1).Item(\"alter\")\r\nobjJson.Item(\"kinder\").Item(1).Item(\"schulabschluss\")\r\nobjJson.Item(\"kinder\").Item(2).Item(\"name\")\r\nobjJson.Item(\"kinder\").Item(2).Item(\"alter\")\r\nobjJson.Item(\"kinder\").Item(2).Item(\"schulabschluss\")<\/pre>\n<p>Wie wir systematisch auf die Elemente eines JSON-Dokuments zugreifen k&ouml;nnen, schauen wir uns am Ende des Beitrags an.<\/p>\n<p>Zur Erl&auml;uterung: Die Elemente in geschweiften Klammern werden von <b>ParseJSON <\/b>in <b>Dictionary<\/b>-Objekte umgewandelt. Diejenigen in eckigen Klammern werden zu <b>Collection<\/b>-Objekten. Und die Name-Wert-Paare wie <b>&#8222;name&#8220;: &#8222;Georg&#8220; <\/b>werden einfach zu Elementen im <b>Dictionary<\/b>-Objekt, denen wir Name und Wert entnehmen k&ouml;nnen.<\/p>\n<p>Hier erhalten wir also ein <b>Dictionary<\/b>-Objekt, das einige Unterelemente mit <b>String<\/b>-Werten enth&auml;lt sowie eines, das als Element ein <b>Collection<\/b>-Element aufnimmt (<b>Kinder<\/b>). Dieses enth&auml;lt wiederum zwei <b>Dictionary<\/b>-Objekte, eines f&uuml;r jedes Kind.<\/p>\n<pre>{\r\n   \"name\": \"Georg\",\r\n   \"alter\": 47,\r\n   \"verheiratet\": false,\r\n   \"beruf\": null,\r\n   \"kinder\": [\r\n     {\r\n       \"name\": \"Lukas\",\r\n       \"alter\": 19,\r\n       \"schulabschluss\": \"Gymnasium\"\r\n     },\r\n     {\r\n       \"name\": \"Lisa\",\r\n       \"alter\": 14,\r\n       \"schulabschluss\": null\r\n     }\r\n   ]\r\n}<\/pre>\n<p>Wenn man die Grundregeln einmal verinnerlicht hat und das JSON-Dokument ordentlich formatiert vorliegen hat, kann man die f&uuml;r den Zugriff notwendigen Ausdr&uuml;cke gegebenenfalls aus dem Kopf formulieren. Falls nicht, haben wir drei Routinen definiert, welche genau die Ausdr&uuml;cke ausgeben, die f&uuml;r den Zugriff auf die im JSON-Dokument enthaltenen Elemente n&ouml;tig sind.<\/p>\n<p>Wir gehen davon aus, dass wir das JSON-Dokument auf irgendeine Weise als Zeichenkette erhalten. In der folgenden Beispielprozedur lesen wir dazu den Inhalt der Datei <b>Beispiel.json <\/b>aus dem gleichen Verzeichnis wie die Datenbank in die Variable <b>strJSON <\/b>ein.<\/p>\n<p>Danach rufen wir die Prozedur <b>GetJSONDOM<\/b> auf, um die f&uuml;r den Zugriff auf das Document Object Model des JSON-Dokuments n&ouml;tigen Ausdr&uuml;cke zu ermitteln:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>JSONBeispiel()\r\n     <span style=\"color:blue;\">Dim <\/span>strJSON<span style=\"color:blue;\"> As String<\/span>\r\n     Open CurrentProject.Path & \"\\Beispiel.json\"  For Input<span style=\"color:blue;\"> As <\/span>#1\r\n     strJSON = Input$(LOF(1), #1)\r\n     Close #1\r\n     GetJSONDOM strJSON, <span style=\"color:blue;\">True<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>JSON-Dictionary auswerten<\/h2>\n<p>Die Funktion <b>GetJSONDOM <\/b>erwartet ein JSON-Dokument in Form einer <b>String<\/b>-Variablen als Parameter (siehe Listing 1). Au&szlig;erdem k&ouml;nnen wir zwei weitere Parameter &uuml;bergeben:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>GetJSONDOM(strJSON<span style=\"color:blue;\"> As String<\/span>, <span style=\"color:blue;\">Optional<\/span> bolValues<span style=\"color:blue;\"> As Boolean<\/span>, <span style=\"color:blue;\">Optional<\/span> bolDebug<span style=\"color:blue;\"> As Boolean<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objJSON<span style=\"color:blue;\"> As <\/span>Dictionary\r\n     <span style=\"color:blue;\">Dim <\/span>dic<span style=\"color:blue;\"> As <\/span>Dictionary\r\n     <span style=\"color:blue;\">Dim <\/span>col<span style=\"color:blue;\"> As <\/span>Collection\r\n     <span style=\"color:blue;\">Dim <\/span>strKey<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strJSONDOM<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objJSON = mdlJSON.ParseJson(strJSON)\r\n     For i = 0 To objJSON.Count - 1\r\n         Select Case TypeName(objJSON.Items(i))\r\n             <span style=\"color:blue;\">Case <\/span>\"Dictionary\"\r\n                 <span style=\"color:blue;\">Set<\/span> dic = objJSON.Items(i)\r\n                 JSONDictionary dic, \"objJSON\", strJSONDOM, bolValues, bolDebug\r\n             <span style=\"color:blue;\">Case <\/span>\"Collection\"\r\n                 <span style=\"color:blue;\">Set<\/span> col = objJSON.Items(i)\r\n                 strKey = \".Item(\"\"\" & objJSON.Keys(i) & \"\"\")\"\r\n                 JSONCollection col, \"objJson\" & strKey, strJSONDOM, bolValues, bolDebug\r\n             <span style=\"color:blue;\">Case Else<\/span>\r\n                 <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> bolValues<span style=\"color:blue;\"> Then<\/span>\r\n                     If bolDebug Then <span style=\"color:blue;\">Debug.Print<\/span> \"objJSON.Item(\"\"\" & objJSON.Keys(i) & \"\"\")\"\r\n                     strJSONDOM = strJSONDOM & \"objJSON.Item(\"\"\" & objJSON.Keys(i) & \"\"\")\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n                 <span style=\"color:blue;\">Else<\/span>\r\n                     <span style=\"color:blue;\">If <\/span>bolDebug<span style=\"color:blue;\"> Then<\/span> <span style=\"color:blue;\">Debug.Print<\/span> \"objJSON.Item(\"\"\" & objJSON.Keys(i) & \"\"\"):\" & objJSON.Items(i)\r\n                     strJSONDOM = strJSONDOM & \"objJSON.Item(\"\"\" & objJSON.Keys(i) & \"\"\"):\" & objJSON.Items(i) & <span style=\"color:blue;\">vbCrLf<\/span>\r\n                 <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">End Select<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n     GetJSONDOM = strJSONDOM\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>[<\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Ausgabe des DOM eines JSON-Dokuments<\/span><\/b><\/p>\n<ul>\n<li><b>bolValues<\/b>: Gibt an, ob hinter den jeweiligen Zeilen f&uuml;r die Pfade zu den Elementen noch die Werte angezeigt werden sollen.<\/li>\n<li><b>bolDebug<\/b>: Gibt an, ob die Daten bei der Ausf&uuml;hrung in den Direktbereich geschrieben werden sollen (dieser Parameter diente eher als Unterst&uuml;tzung beim Testen der Funktionen beim Programmieren).<\/li>\n<\/ul>\n<p>Die Funktion <b>GetJSONDOM<\/b> deklariert zun&auml;chst eine <b>Dictionary<\/b>-Variable namens <b>objJSON<\/b> zum Aufnehmen des von der nachfolgend aufgerufenen Funktion <b>ParseJSON <\/b>zur&uuml;ckgelieferten <b>Dictionary<\/b>-Objekts. Au&szlig;erdem deklariert sie eine weitere <b>Dictionary<\/b>-Variable namens <b>dic <\/b>und eine <b>Collection<\/b>-Variable namens <b>col<\/b>. Diese nehmen eventuell direkt in <b>objJSON <\/b>enthaltene Objekte des entsprechenden Typs auf. <b>strKey <\/b>nimmt im Falle eines <b>Collection<\/b>-Objekts die Schl&uuml;ssel der enthaltenen Objekte auf.<\/p>\n<p>Die Prozedur durchl&auml;uft nach Einlesen des &uuml;bergeordneten <b>Dictionary<\/b>-Objekts alle darin enthaltenen Unterelemente. Dabei nutzen wir eine <b>For&#8230;Next<\/b>-Schleife, welche die Werte <b>0 <\/b>bis zur Anzahl der Unterelemente minus <b>1 <\/b>durchl&auml;uft. Die Anzahl ermitteln wir mit der <b>Count<\/b>-Eigenschaft.<\/p>\n<p>Innerhalb dieser Schleife untersucht eine <b>Select Case<\/b>-Bedingung den Typ des aktuell durchlaufenen Elements, das wir mit <b>objJSON.Items(i) <\/b>referenzieren. Die <b>TypeName<\/b>-Funktion ermittelt den Typ des Elements, wobei wir auf die Werte <b>Dictionary<\/b>, <b>Collection <\/b>und andere sto&szlig;en k&ouml;nnen. Andere sind Name-Wert-Paare.<\/p>\n<p>Finden wir ein <b>Dictionary<\/b>-Objekt als Unterobjekt vor, weisen wir das Objekt der Variablen <b>dic <\/b>zu und rufen die rekursiv definierte Funktion <b>JSONDictionary <\/b>auf. Dieser &uuml;bergeben wir den Verweis auf das <b>Dictionary<\/b>-Objekt sowie den Namen des &uuml;bergeordneten Elements, in diesem Fall <b>objJSON<\/b>, die Variable <b>strJSONDOM<\/b>, in der wir das Objektmodell zusammenstellen sowie die beiden optionalen <b>Boolean<\/b>-Parameter <b>bolValues <\/b>und <b>bolDebug<\/b>.<\/p>\n<p>Falls wir ein <b>Collection<\/b>-Objekt vorfinden, f&uuml;llen wir die Variable <b>col <\/b>mit einem Verweis auf die Collection und &uuml;bergeben diese an die ebenfalls rekursiv definierte Funktion <b>JSONCollection<\/b>. Auch dieser &uuml;bergeben wir mit dem zweiten Parameter eine Bezeichnung des &uuml;bergeordneten Elements. Diesen stellen wir allerdings zuvor in der Variablen <b>strKey <\/b>zusammen. Der Wert besteht zum Beispiel im Falle des <b>kinder<\/b>-Elements aus der Zeichenkette <b>objJson.Item(&#8222;kinder&#8220;)<\/b>. Die &uuml;brigen drei Parameter nehmen wieder die Variablen <b>strJSONDOM<\/b>, <b>bolValues <\/b>und <b>bolDebug <\/b>auf.<\/p>\n<p>Der dritte Fall sind die bereits angesprochenen Name-Wert-Paare. F&uuml;r diese geben wir direkt den zum Abrufen notwendigen Ausdruck im Direktfenster aus. Dieser lautet beispielsweise f&uuml;r das Feld <b>name <\/b>wie folgt:<\/p>\n<pre>objJSON.Item(\"name\")<\/pre>\n<p>Wenn der Parameter <b>bolDebug <\/b>den Wert <b>True <\/b>aufweist, geben wir an dieser Stelle auch noch die aktuelle Zeile des JSONDOM aus.<\/p>\n<h2>Die rekursive Funktion JSONDictionary<\/h2>\n<p>Die erste rekursive Funktion wird aufgerufen, wenn der Wert des aktuellen Name-Wert-Paares des &uuml;bergeordneten Elements ein <b>Dictionary<\/b>-Objekt ist. Sie nimmt das <b>Dictionary<\/b>-Element sowie den Pfad zum &uuml;bergeordneten Element entgegen (siehe Listing 2). Au&szlig;erdem erh&auml;lt sie mit dem Parameter <b>strJSONDOM <\/b>die Variable, die mit den Zeilen zum Referenzieren der einzelnen <b>JSONDOM<\/b>-Elemente des aktuellen Elements erg&auml;nzt wird und die beiden optionalen <b>Boolean<\/b>-Parameter <b>bolValues <\/b>und <b>bolDebug<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>JSONDictionary(dicParent<span style=\"color:blue;\"> As <\/span>Scripting.Dictionary, strParent<span style=\"color:blue;\"> As String<\/span>, strJSONDOM<span style=\"color:blue;\"> As String<\/span>, _\r\n         <span style=\"color:blue;\">Optional<\/span> bolValues<span style=\"color:blue;\"> As Boolean<\/span>, <span style=\"color:blue;\">Optional<\/span> bolDebug<span style=\"color:blue;\"> As Boolean<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>dic<span style=\"color:blue;\"> As <\/span>Dictionary\r\n     <span style=\"color:blue;\">Dim <\/span>col<span style=\"color:blue;\"> As <\/span>Collection\r\n     For i = 0 To dicParent.Count - 1\r\n         Select Case TypeName(dicParent.Items(i))\r\n             <span style=\"color:blue;\">Case <\/span>\"Dictionary\"\r\n                 <span style=\"color:blue;\">Set<\/span> dic = dicParent.Items(i)\r\n                 JSONDictionary dic, strParent & \".Item(\"\"\" & dicParent.Keys(i) & \"\"\")\", strJSONDOM, bolValues, bolDebug\r\n             <span style=\"color:blue;\">Case <\/span>\"Collection\"\r\n                 <span style=\"color:blue;\">Set<\/span> col = dicParent.Items(i)\r\n                 JSONCollection col, strParent & \".Item(\"\"\" & dicParent.Keys(i) & \"\"\")\", strJSONDOM, bolValues, bolDebug\r\n             <span style=\"color:blue;\">Case Else<\/span>\r\n                 <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> bolValues<span style=\"color:blue;\"> Then<\/span>\r\n                     <span style=\"color:blue;\">If <\/span>bolDebug<span style=\"color:blue;\"> Then<\/span> <span style=\"color:blue;\">Debug.Print<\/span> strParent & \".Item(\"\"\" & dicParent.Keys(i) & \"\"\")\"\r\n                     strJSONDOM = strJSONDOM & strParent & \".Item(\"\"\" & dicParent.Keys(i) & \"\"\")\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n                 <span style=\"color:blue;\">Else<\/span>\r\n                     <span style=\"color:blue;\">If <\/span>bolDebug<span style=\"color:blue;\"> Then<\/span> <span style=\"color:blue;\">Debug.Print<\/span> strParent & \".Item(\"\"\" & dicParent.Keys(i) & \"\"\"): \" _\r\n                         & dicParent.Items(i)\r\n                     strJSONDOM = strJSONDOM & strParent & \".Item(\"\"\" & dicParent.Keys(i) & \"\"\"): \" _\r\n                         & dicParent.Items(i) & <span style=\"color:blue;\">vbCrLf<\/span>\r\n                 <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">End Select<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Ausgabe der Elementreferenzen f&uuml;r untergeordnete Dictionary-Objekte<\/span><\/b><\/p>\n<p>Der Rest verl&auml;uft etwa so wie in der soeben beschriebenen Prozedur <b>GetJSONDOM<\/b>. Die Funktion deklariert ein <b>Dictionary<\/b>-Objekt namens <b>dic <\/b>und ein <b>Collection<\/b>-Objekt namens <b>col<\/b>. Dann durchl&auml;uft sie in einer <b>For&#8230;Next<\/b>-Schleife alle Elemente aus der &uuml;bergeordneten <b>Dictionary<\/b>-Auflistung. Darin pr&uuml;ft sie per <b>Select Case<\/b>-Anweisung den Typ des aktuell durchlaufenen Elements der Auflistung.<\/p>\n<p>Im Falle von <b>Dictionary <\/b>ruft die Funktion sich selbst auf. Dabei &uuml;bergibt sie das aktuell untersuchte <b>Dictionary<\/b>-Objekt sowie einen erweiterten Ausdruck f&uuml;r den Zugriff auf das Objekt. Wenn im vorherigen Durchlauf <b>objJSON <\/b>&uuml;bergeben wurde, so wird dieser Ausdruck nun beispielsweise um <b>.Item(&#8222;kinder&#8220;) <\/b>erweitert. Der &uuml;bergebene Ausdruck hei&szlig;t also beispielsweise:<\/p>\n<pre>objJSON.Item(\"kinder\")<\/pre>\n<p>Handelt es sich bei dem aktuellen Objekt um eine <b>Collection<\/b>-Auflistung, ruft die Funktion die Funktion <b>JSONCollection <\/b>auf &#8211; diesmal mit der Collection aus <b>col <\/b>als ersten Parameter. Auch hier gibt es neben <b>Dictionary <\/b>und <b>Collection <\/b>wieder einen dritten Fall, der wieder auf ein Name-Wert-Paar hinweist. Hier wird der entsprechende Ausdruck wieder an <b>strJSONDOM <\/b>angeh&auml;ngt und gegebenenfalls im Direktbereich ausgegeben.<\/p>\n<h2>Die rekursive Funktion JSONCollection<\/h2>\n<p>Die zweite rekursive Funktion hei&szlig;t <b>JSONCollection<\/b> und sieht wie in Listing 3 aus. Der Aufbau ist mehr oder weniger identisch mit dem der Funktion <b>JSONDictionary<\/b>. Ein wichtiger Unterschied ist, dass diese Funktion als ersten Parameter ein <b>Collection<\/b>-Objekt entgegennimmt und dessen Elemente in einer <b>For&#8230;Next<\/b>-Schleife untersucht.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>JSONCollection(colParent<span style=\"color:blue;\"> As <\/span>Collection, strParent<span style=\"color:blue;\"> As String<\/span>, strJSONDOM<span style=\"color:blue;\"> As String<\/span>, _\r\n         <span style=\"color:blue;\">Optional<\/span> bolValues<span style=\"color:blue;\"> As Boolean<\/span>, <span style=\"color:blue;\">Optional<\/span> bolDebug<span style=\"color:blue;\"> As Boolean<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>dic<span style=\"color:blue;\"> As <\/span>Dictionary\r\n     <span style=\"color:blue;\">Dim <\/span>col<span style=\"color:blue;\"> As <\/span>Collection\r\n     For i = 1 To colParent.Count\r\n         Select Case TypeName(colParent.Item(i))\r\n             <span style=\"color:blue;\">Case <\/span>\"Dictionary\"\r\n                 <span style=\"color:blue;\">Set<\/span> dic = colParent.Item(i)\r\n                 JSONDictionary dic, strParent & \".Item(\" & i & \")\", strJSONDOM, bolValues, bolDebug\r\n             <span style=\"color:blue;\">Case <\/span>\"Collection\"\r\n                 <span style=\"color:blue;\">Set<\/span> col = colParent.Items(i)\r\n                 JSONCollection col, strParent, strJSONDOM, bolValues, bolDebug\r\n             <span style=\"color:blue;\">Case Else<\/span>\r\n                 <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> bolValues<span style=\"color:blue;\"> Then<\/span>\r\n                     <span style=\"color:blue;\">If <\/span>bolDebug<span style=\"color:blue;\"> Then<\/span> <span style=\"color:blue;\">Debug.Print<\/span> TypeName(col.Item(i))\r\n                     strJSONDOM = strJSONDOM & TypeName(col.Item(i)) & <span style=\"color:blue;\">vbCrLf<\/span>\r\n                 <span style=\"color:blue;\">Else<\/span>\r\n                     <span style=\"color:blue;\">If <\/span>bolDebug<span style=\"color:blue;\"> Then<\/span> <span style=\"color:blue;\">Debug.Print<\/span> TypeName(col.Item(i)) & \": \" & col.Item(i)\r\n                     strJSONDOM = strJSONDOM & TypeName(col.Item(i)) & \": \" & col.Item(i) & <span style=\"color:blue;\">vbCrLf<\/span>\r\n                 <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">End Select<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Ausgabe der Elementreferenzen f&uuml;r untergeordnete Collection-Objekte<\/span><\/b><\/p>\n<p>Der n&auml;chste, noch wichtigere Unterschied ist, dass der Index der Eintr&auml;ge einer <b>Collection<\/b>-Auflistung mit <b>1 <\/b>beginnt und nicht wie bei der <b>Dictionary<\/b>-Auflistung mit <b>0<\/b>. Daher m&uuml;ssen wir die <b>For&#8230;Next<\/b>-Schleife entsprechend umformulieren.<\/p>\n<p>Die &uuml;brigen Anweisungen funktionieren etwa wie in der zuvor beschriebenen Funktion <b>JSONDictionary<\/b>.<\/p>\n<h2>Wie nutze ich das Ergebnis?<\/h2>\n<p>Das Ergebnis, das f&uuml;r unser kleines Beispiel wie folgt aussieht, k&ouml;nnen wir auf verschiedene Arten nutzen:<\/p>\n<pre>objJSON.Item(\"name\")\r\nobjJSON.Item(\"alter\")\r\nobjJSON.Item(\"verheiratet\")\r\nobjJSON.Item(\"beruf\")\r\nobjJson.Item(\"kinder\").Item(1).Item(\"name\")\r\nobjJson.Item(\"kinder\").Item(1).Item(\"alter\")\r\nobjJson.Item(\"kinder\").Item(1).Item(\"schulabschluss\")\r\nobjJson.Item(\"kinder\").Item(2).Item(\"name\")\r\nobjJson.Item(\"kinder\").Item(2).Item(\"alter\")\r\nobjJson.Item(\"kinder\").Item(2).Item(\"schulabschluss\")<\/pre>\n<p>Die einfachste ist: Wenn wir Inhalte mit den oben genannten Ausdr&uuml;cken referenzieren k&ouml;nnen, dann k&ouml;nnen wir diese auch einfach im Direktbereich ausgeben. Dazu muss <b>objJSON <\/b>nat&uuml;rlich noch gef&uuml;llt sein, was nicht der Fall ist, wenn wir es wie in obigem Beispiel nutzen &#8211; hier wird <b>objJSON <\/b>erst innerhalb der Prozedur <b>GetJSONDOM <\/b>deklariert und gef&uuml;llt.<\/p>\n<h2>Werte eines JSON-Dokuments ausgeben<\/h2>\n<p>Um alle Werte auszugeben, k&ouml;nnen wir eine Prozedur wie die aus Listing 4 verwenden. Diese Prozedur liest das Beispieldokument aus der Textdatei ein und erstellt mit der Funktion <b>ParseJSON <\/b>das <b>Dictionary<\/b>-Objekt, das wir mit der Variablen <b>objJSON <\/b>referenzieren. Danach k&ouml;nnen wir mit den zuvor ermittelten Ausdr&uuml;cken gezielt auf die Inhalte des JSON-Dokuments zugreifen und diese im Direktbereich ausgeben. Das Ergebnis sieht so aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AusgabeImDirektbereich()\r\n     <span style=\"color:blue;\">Dim <\/span>strJSON<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objJSON<span style=\"color:blue;\"> As <\/span>Dictionary\r\n     Open CurrentProject.Path & \"\\Beispiel.json\" For Input<span style=\"color:blue;\"> As <\/span>#1\r\n     strJSON = Input$(LOF(1), #1)\r\n     Close #1\r\n     <span style=\"color:blue;\">Set<\/span> objJSON = ParseJson(strJSON)\r\n     <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(\"name\")\r\n     <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(\"alter\")\r\n     <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(\"verheiratet\")\r\n     <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(\"beruf\")\r\n     <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(\"kinder\").Item(1).Item(\"name\")\r\n     <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(\"kinder\").Item(1).Item(\"alter\")\r\n     <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(\"kinder\").Item(1).Item(\"schulabschluss\")\r\n     <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(\"kinder\").Item(2).Item(\"name\")\r\n     <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(\"kinder\").Item(2).Item(\"alter\")\r\n     <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(\"kinder\").Item(2).Item(\"schulabschluss\")\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Ausgabe der Werte eines JSON-Dokuments<\/span><\/b><\/p>\n<pre>Georg\r\n  47 \r\nFalsch\r\nNull\r\nLukas\r\n  19 \r\nGymnasium\r\nLisa\r\n  14 \r\nNull<\/pre>\n<h2>Zugriff auf sich wiederholende Elemente<\/h2>\n<p>Im Beispieldokument haben wir zwei Elemente des Typs <b>kinder<\/b>. Wir gehen davon aus, dass die mit dem JSON-Dokument gelieferten Daten nicht immer gleich aussehen, nur die Struktur sollte zuverl&auml;ssig gleich bleiben. Ist das nicht der Fall, m&uuml;ssen wir den Code zum Auslesen des Dokuments ohnehin umschreiben. Wenn wir beispielsweise die Informationen zu den Kindern auslesen wollen und diese mal nicht vorhanden sind und mal in verschiedener Anzahl, k&ouml;nnen wir diese mit dem Code aus Listing 5 ermitteln.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AusgabePerSchleife()\r\n     <span style=\"color:blue;\">Dim <\/span>strJSON<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objJSON<span style=\"color:blue;\"> As <\/span>Dictionary\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     Open CurrentProject.Path & \"\\Beispiel.json\" For Input<span style=\"color:blue;\"> As <\/span>#1\r\n     strJSON = Input$(LOF(1), #1)\r\n     Close #1\r\n     <span style=\"color:blue;\">Set<\/span> objJSON = ParseJson(strJSON)\r\n     For i = 1 To objJSON.Item(\"kinder\").Count\r\n         <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(\"kinder\").Item(i).Item(\"name\")\r\n         <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(\"kinder\").Item(i).Item(\"alter\")\r\n         <span style=\"color:blue;\">Debug.Print<\/span> objJSON.Item(\"kinder\").Item(i).Item(\"schulabschluss\")\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Ausgabe der Werte von Elementen per Schleife<\/span><\/b><\/p>\n<p>Hier durchlaufen wir die <b>kinder<\/b>-Elemente in einer <b>For&#8230;Next<\/b>-Schleife und referenzieren die Unterelemente dabei mit <b>objJSON.Item(&#8222;kinder&#8220;).Item(i)<\/b>. Auf die gleiche Weise k&ouml;nnen wir die Daten gr&ouml;&szlig;erer JSON-Dokumente analysieren.<\/p>\n<h2>Ausgabe von umfangreicheren JSON-Dokumenten<\/h2>\n<p>Im Beitrag <b>Mit Access auf Notion zugreifen <\/b>(<b>www.access-im-unternehmen.de\/1401<\/b>) schauen wir uns den Umgang mit umfangreicheren JSON-Dokumenten an. Dabei handelt es sich um die Daten, die wir &uuml;ber die Webservice-API von Notion abrufen.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>JSONDatenAuslesen.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/50F2FD27-DBD6-4A8B-9960-B145FB154BAA\/aiu_1403.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>F&uuml;r XML gibt es eine eigene Bibliothek zum Lesen und Schreiben der Inhalte eines XML-Dokuments. Bei JSON sieht das anders aus: Microsoft hat bisher keine Bibliothek bereitgestellt, mit dem man komfortable auf ein JSON-Dokument zugreifen kann. Wir wollen diesen Missstand zumindest ein wenig lindern. Es gibt bereits ein Modul, welches den Inhalt einer JSON-Datei in eine Art Objektmodell einliest, das von VBA aus wesentlich einfacher zu lesen ist. Dieses greifen wir in diesem Beitrag auf und zeigen, wie wir die Struktur der enthaltenen Daten erfassen und damit besser und systematisch auswerten k&ouml;nnen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012023,662022,662023,66062022,44000025],"tags":[],"class_list":["post-55001403","post","type-post","status-publish","format-standard","hentry","category-66012023","category-662022","category-662023","category-66062022","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>JSON-Daten auslesen - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JSON-Daten auslesen\" \/>\n<meta property=\"og:description\" content=\"F&uuml;r XML gibt es eine eigene Bibliothek zum Lesen und Schreiben der Inhalte eines XML-Dokuments. Bei JSON sieht das anders aus: Microsoft hat bisher keine Bibliothek bereitgestellt, mit dem man komfortable auf ein JSON-Dokument zugreifen kann. Wir wollen diesen Missstand zumindest ein wenig lindern. Es gibt bereits ein Modul, welches den Inhalt einer JSON-Datei in eine Art Objektmodell einliest, das von VBA aus wesentlich einfacher zu lesen ist. Dieses greifen wir in diesem Beitrag auf und zeigen, wie wir die Struktur der enthaltenen Daten erfassen und damit besser und systematisch auswerten k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-17T09:32:01+00:00\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"13\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/JSONDaten_auslesen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/JSONDaten_auslesen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"JSON-Daten auslesen\",\"datePublished\":\"2023-06-17T09:32:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/JSONDaten_auslesen\\\/\"},\"wordCount\":1788,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/JSONDaten_auslesen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/d1880a13ae1048f19bd37d9c26b8e48c\",\"articleSection\":[\"1\\\/2023\",\"2022\",\"2023\",\"6\\\/2022\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/JSONDaten_auslesen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/JSONDaten_auslesen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/JSONDaten_auslesen\\\/\",\"name\":\"JSON-Daten auslesen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/JSONDaten_auslesen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/JSONDaten_auslesen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/d1880a13ae1048f19bd37d9c26b8e48c\",\"datePublished\":\"2023-06-17T09:32:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/JSONDaten_auslesen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/JSONDaten_auslesen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/JSONDaten_auslesen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/d1880a13ae1048f19bd37d9c26b8e48c\",\"contentUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/d1880a13ae1048f19bd37d9c26b8e48c\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/JSONDaten_auslesen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JSON-Daten auslesen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"JSON-Daten auslesen - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/","og_locale":"de_DE","og_type":"article","og_title":"JSON-Daten auslesen","og_description":"F&uuml;r XML gibt es eine eigene Bibliothek zum Lesen und Schreiben der Inhalte eines XML-Dokuments. Bei JSON sieht das anders aus: Microsoft hat bisher keine Bibliothek bereitgestellt, mit dem man komfortable auf ein JSON-Dokument zugreifen kann. Wir wollen diesen Missstand zumindest ein wenig lindern. Es gibt bereits ein Modul, welches den Inhalt einer JSON-Datei in eine Art Objektmodell einliest, das von VBA aus wesentlich einfacher zu lesen ist. Dieses greifen wir in diesem Beitrag auf und zeigen, wie wir die Struktur der enthaltenen Daten erfassen und damit besser und systematisch auswerten k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/","og_site_name":"Access im Unternehmen","article_published_time":"2023-06-17T09:32:01+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"13\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"JSON-Daten auslesen","datePublished":"2023-06-17T09:32:01+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/"},"wordCount":1788,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/d1880a13ae1048f19bd37d9c26b8e48c","articleSection":["1\/2023","2022","2023","6\/2022","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/","url":"https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/","name":"JSON-Daten auslesen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/d1880a13ae1048f19bd37d9c26b8e48c","datePublished":"2023-06-17T09:32:01+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/#primaryimage","url":"http:\/\/vg08.met.vgwort.de\/na\/d1880a13ae1048f19bd37d9c26b8e48c","contentUrl":"http:\/\/vg08.met.vgwort.de\/na\/d1880a13ae1048f19bd37d9c26b8e48c"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/JSONDaten_auslesen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"JSON-Daten auslesen"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001403","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001403"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001403\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001403"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001403"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001403"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}