{"id":13149,"date":"2026-09-24T12:45:00","date_gmt":"2026-09-24T10:45:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=13149"},"modified":"2026-11-04T22:47:46","modified_gmt":"2026-11-04T21:47:46","slug":"tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/","title":{"rendered":"Tutorial: Ein JSON pr\u00fcfen, bevor es in ein Tag wandert"},"content":{"rendered":"<p>Eine JSON-Nutzlast kann syntaktisch g\u00fcltig sein und trotzdem den falschen Wert \u00fcbertragen. Drei getrennte Pr\u00fcfungen helfen: den Originaltext parsen, Risiken beim Datenaustausch erkennen und die Regeln der empfangenden Anwendung pr\u00fcfen. Formatieren allein deckt diese Aufgaben nicht vollst\u00e4ndig ab.<\/p>\n<p>Die folgenden Beispiele laufen lokal. Der Pr\u00fcfer akzeptiert genau einen JSON-Wert, weist doppelte Objektnamen zur\u00fcck und erh\u00e4lt Dezimalwerte ohne vorherige Umwandlung in bin\u00e4re Gleitkommazahlen. Ein Tag-Manager oder Analysedienst wird dabei nicht angesprochen.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-13147-json-payload-20261024-de.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"Vier Stufen der JSON-Pr\u00fcfung\"><figcaption>Vier Stufen der JSON-Pr\u00fcfung<\/figcaption><\/figure>\n<h2>Mit dem tats\u00e4chlichen JSON-Text beginnen<\/h2>\n<p>JSON ist ein Datenformat, kein ausf\u00fchrbares JavaScript. Objektnamen und Zeichenketten ben\u00f6tigen doppelte Anf\u00fchrungszeichen. Kommentare, abschlie\u00dfende Kommas, undefined, NaN und Infinity geh\u00f6ren nicht zur JSON-Grammatik. Die Wertkategorien sind Objekt, Array, Zeichenkette, Zahl, Wahrheitswert und null. Ein Dokument darf auch nur aus einem einzelnen Wert wie false oder 42 bestehen. Datums- und Kennungsformate geh\u00f6ren zum Anwendungsschema.<\/p>\n<p>Ein Apostroph innerhalb einer doppelt eingerahmten Zeichenkette ist g\u00fcltig. Ein ungesch\u00fctzter Zeilenumbruch innerhalb der Zeichenkette ist ung\u00fcltig; die Escape-Sequenz <code>\\n<\/code> stellt einen Umbruch dar. Parser erzeugen unterschiedliche Fehlermeldungen. Eine feste Anzahl \u201elauter\u201c und \u201estiller\u201c Fehler hilft deshalb wenig.<\/p>\n<p>Vor dem Formatieren bleibt die urspr\u00fcngliche Antwort oder Datei erhalten. Ein Formatierer kann fehlerhaftes JSON ablehnen, doppelte Namen verwerfen oder Zahlen anders darstellen. Ein Fehler an Position null kann durch eine Byte-Reihenfolge-Marke, HTML statt JSON, eine leere Eingabe oder ein anderes unerwartetes Anfangszeichen entstehen. Die Position allein beweist keine BOM.<\/p>\n<h2>Doppelte Namen vor dem Informationsverlust ablehnen<\/h2>\n<p>RFC 8259 empfiehlt eindeutige Namen innerhalb jedes Objekts. Empf\u00e4nger behandeln Doppelungen unterschiedlich: H\u00e4ufig bleibt der letzte Wert erhalten, m\u00f6glich sind aber auch Ablehnung oder Weitergabe aller Paare. Nach der Umwandlung in ein gew\u00f6hnliches Dictionary kann der verworfene Wert bereits fehlen.<\/p>\n<p><code>{\"a\":{\"x\":1},\"a\":{\"y\":2}}<\/code> wiederholt beispielsweise den Namen a, obwohl sich die Pfade zu den Endwerten, a.x und a.y, unterscheiden. Eine Suche nach mehrfachen Blattpfaden eines Streaming-Parsers erkennt diesen Fall nicht zuverl\u00e4ssig. Derselbe Name in zwei getrennten Objekten ist dagegen keine Doppelung innerhalb eines Objekts. Der Pr\u00fcfer verwendet Pythons <code>object_pairs_hook<\/code> vor dem Aufbau jedes Dictionarys, auch bei verschachtelten Objekten und maskierten Namen.<\/p>\n<h2>Kennungen passend zum Empf\u00e4ngerschema erhalten<\/h2>\n<p>JavaScripts Number verwendet bin\u00e4re Gleitkommazahlen. Jede ganze Zahl im geschlossenen Bereich von \u2212(2^53\u22121) bis 2^53\u22121 ist sicher darstellbar. Au\u00dferhalb sind einzelne ganze Zahlen weiterhin darstellbar, aber nicht mehr alle benachbarten Werte unterscheidbar. Das folgende Node.js-Beispiel zeigt eine ver\u00e4nderte letzte Ziffer.<\/p>\n<pre><code>const parsed = JSON.parse(&#x27;{&quot;id&quot;:9007199254740993}&#x27;);\nconsole.log(parsed.id); \/\/ 9007199254740992\nconsole.log(Number.isSafeInteger(parsed.id)); \/\/ false\nconst exact = JSON.parse(&#x27;{&quot;id&quot;:&quot;9007199254740993&quot;}&#x27;);\nconsole.log(exact.id); \/\/ &quot;9007199254740993&quot; as a string\n<\/code><\/pre>\n<p>Eine Zeichenkette erh\u00e4lt diese Kennung, wenn die empfangende API Zeichenketten erlaubt. Verlangt die API eine Zahl, gelten deren dokumentierte Darstellung und Grenzen. Jede Kennung bedingungslos in Text umzuwandeln kann eine g\u00fcltige Anfrage ung\u00fcltig machen. Ein regul\u00e4rer Ausdruck zum Z\u00e4hlen von Ziffern ist keine vollst\u00e4ndige Genauigkeitspr\u00fcfung: Negative Werte und Exponenten k\u00f6nnen fehlen, Zahlenzeichenketten mit Zahlen verwechselt werden.<\/p>\n<h2>Ein lokaler Pr\u00fcfer mit klaren Zusatzregeln<\/h2>\n<p>Die Datei ben\u00f6tigt nur die Python-Standardbibliothek. Nach dem Speichern als <code>check_json.py<\/code> lautet der Aufruf <code>python3 check_json.py payload.json<\/code>. R\u00fcckgabecode 0 bedeutet bestandene lokale Pr\u00fcfungen, R\u00fcckgabecode 1 eine Ablehnung. Der Dateiinhalt wird nicht ausgegeben.<\/p>\n<pre><code>import json\nimport sys\nfrom decimal import Decimal, InvalidOperation\nfrom pathlib import Path\n\nMAX_BYTES = 1_048_576  # Local example policy, not a JSON limit.\n\ndef unique_object(pairs):\n    result = {}\n    for key, value in pairs:\n        if key in result:\n            raise ValueError(&quot;duplicate object member&quot;)\n        result[key] = value\n    return result\n\ndef reject_constant(value):\n    raise ValueError(&quot;non-JSON numeric constant&quot;)\n\ndef check(raw):\n    if len(raw) &gt; MAX_BYTES:\n        raise ValueError(&quot;example size limit exceeded&quot;)\n    # Strict UTF-8; this example also rejects a leading BOM.\n    text = raw.decode(&quot;utf-8&quot;)\n    if text.startswith(&quot;\\ufeff&quot;):\n        raise ValueError(&quot;leading BOM rejected by local policy&quot;)\n    value = json.loads(text, object_pairs_hook=unique_object,\n                       parse_float=Decimal, parse_constant=reject_constant)\n    # Reject lone UTF-16 surrogates for interoperable Unicode text.\n    def visit(x):\n        if isinstance(x, str):\n            x.encode(&quot;utf-8&quot;)\n        elif isinstance(x, dict):\n            for key, item in x.items():\n                visit(key)\n                visit(item)\n        elif isinstance(x, list):\n            for item in x:\n                visit(item)\n    visit(value)\n    return value\n\nif __name__ == &quot;__main__&quot;:\n    if len(sys.argv) != 2:\n        raise SystemExit(&quot;Usage: python3 check_json.py payload.json&quot;)\n    try:\n        with Path(sys.argv[1]).open(&quot;rb&quot;) as stream:\n            raw = stream.read(MAX_BYTES + 1)\n        check(raw)\n    except json.JSONDecodeError as exc:\n        print(f&quot;Syntax error: line {exc.lineno}, column {exc.colno}&quot;,\n              file=sys.stderr)\n        raise SystemExit(1)\n    except (OSError, ValueError, UnicodeError, RecursionError,\n            InvalidOperation, OverflowError):\n        print(&quot;Rejected: encoding, duplicate, value or resource policy&quot;,\n              file=sys.stderr)\n        raise SystemExit(1)\n    print(&quot;OK: JSON plus the example&#x27;s interoperability checks&quot;)\n<\/code><\/pre>\n<p>Die Grenze von einem Mebibyte, die Ablehnung einer f\u00fchrenden BOM und die Ablehnung einzelner Surrogatzeichen sind ausdr\u00fccklich zus\u00e4tzliche Regeln f\u00fcr Datenaustausch und Ressourcenverbrauch. Nicht jede dadurch abgelehnte Eingabe verletzt die JSON-Grammatik. Auch der Parser besitzt Implementierungsgrenzen. Das Beispiel ist kein vollst\u00e4ndiger Schutz vor sch\u00e4dlichen Eingaben.<\/p>\n<p>Pythons Standarddecoder akzeptiert NaN und Infinity als Erweiterungen; <code>parse_constant<\/code> verhindert das hier. <code>Decimal<\/code> erh\u00e4lt dezimale Eingaben f\u00fcr die Pr\u00fcfung, ganze Zahlen bleiben Python-Ganzzahlen. Beides beweist nicht, dass ein sp\u00e4terer JavaScript-Empf\u00e4nger oder eine externe API denselben Wert darstellen kann.<\/p>\n<h2>Fehlermeldungen am Original lesen<\/h2>\n<p>Python liefert bei einem Syntaxfehler Zeile und Spalte. JavaScript-Fehlermeldungen unterscheiden sich nach Engine und Version. Das Herauslesen eines englischen Wortes \u201eposition\u201c ist keine portable Schnittstelle. Zeichenpositionen, UTF-16-Codeeinheiten und Bytepositionen d\u00fcrfen nicht vermischt werden. Tabulatoren und Umbr\u00fcche machen auch eine selbst gesetzte Fehlermarkierung mit dem Zeichen ^ unzuverl\u00e4ssig.<\/p>\n<p>Die lokale Sichtung rund um die urspr\u00fcngliche Fehlerstelle hilft. Produktionsprotokolle sollten keine vollst\u00e4ndigen Nutzlasten mit personenbezogenen Daten oder Zugangsdaten ausgeben. Die Syntaxmeldung zeigt die Stelle des Parserabbruchs; der eigentliche Fehler kann davor liegen.<\/p>\n<h2>Was jq belegt und was nicht<\/h2>\n<p><code>jq -e .<\/code> ist keine reine G\u00fcltigkeitspr\u00fcfung: Die g\u00fcltigen Werte false und null erzeugen einen R\u00fcckgabecode ungleich null. jq liest \u00fcblicherweise au\u00dferdem einen Strom von JSON-Werten. Eine erfolgreiche Verarbeitung beweist deshalb nicht genau ein Dokument. Leere Eingaben und Erweiterungen ben\u00f6tigen ausdr\u00fcckliche Regeln. Der Python-Pr\u00fcfer oben legt diese Regeln offen.<\/p>\n<p>Das Zahlenverhalten h\u00e4ngt von jq-Version und Build-Optionen ab. Das Erhalten eines Zahlenliterals und die Umwandlung bei Rechenoperationen sind verschiedene Dinge. Eine pauschale Garantie f\u00fcr jede Ausgabe seit Version 1.7 ist falsch. F\u00fcr Genauigkeitspr\u00fcfungen ersetzt eine formatierte Kopie nicht das Original.<\/p>\n<h2>Danach den Vertrag des Tags oder der API pr\u00fcfen<\/h2>\n<p>Eine bestandene lokale Pr\u00fcfung best\u00e4tigt weder Pflichtfelder noch Ereignisnamen, W\u00e4hrung, Datumsformat oder Gesch\u00e4ftsregeln. Die erzeugte Nutzlast braucht zus\u00e4tzlich das Schema und die dokumentierten Diagnosewerkzeuge der empfangenden Plattform. Antworten und Verarbeitungsergebnisse m\u00fcssen ebenfalls beobachtet werden. Ein HTTP-Status allein belegt unter Umst\u00e4nden keine richtigen nachgelagerten Daten.<\/p>\n<p>Bei JSON-LD wird die ausgelieferte Seite zusammen mit dem jeweiligen Typ strukturierter Daten gepr\u00fcft. Ein besch\u00e4digter Block beweist nicht, dass s\u00e4mtliche anderen Bl\u00f6cke unlesbar sind. G\u00fcltige Syntax garantiert auch keine erweiterten Suchergebnisse. Bei Tag-Vorlagen sind Importpr\u00fcfung und Laufzeitverhalten getrennte Aufgaben; der Fehlerzeitpunkt h\u00e4ngt vom tats\u00e4chlichen Format und der Plattform ab.<\/p>\n<div class=\"lw-faq\">\n<h2>Fragen und Antworten<\/h2>\n<h3>Wie verh\u00e4lt sich JSON.parse im Browser bei doppelten Namen?<\/h3>\n<p>Es meldet keinen Fehler und beh\u00e4lt den letzten Wert. Aus <code>{\"a\":1,\"a\":2}<\/code> wird ein Objekt mit a = 2, und nichts im Ergebnis zeigt, dass es einen ersten Wert gab. Ein Tag, das die Nutzlast im Browser liest, sieht die Doppelung also nie; deshalb lohnt die Pr\u00fcfung am Originaltext vor dem Parsen.<\/p>\n<h3>Welche Werte ver\u00e4ndert JSON.stringify beim Erzeugen einer Nutzlast stillschweigend?<\/h3>\n<p>Mehrere, und nur in einem Fall entsteht ein Fehler. Code, der eine Nutzlast in JavaScript zusammenbaut, etwa in einer benutzerdefinierten Variablen, kann auf diese F\u00e4lle treffen:<\/p>\n<ul>\n<li><code>NaN<\/code>, <code>Infinity<\/code> und <code>-Infinity<\/code> werden zu <code>null<\/code>. Eine fehlgeschlagene Umrechnung kommt so als g\u00fcltiges JSON an.<\/li>\n<li>Eigenschaften mit dem Wert <code>undefined<\/code>, einer Funktion oder einem Symbol fallen in Objekten weg; in Arrays werden sie zu <code>null<\/code>. Ein Pflichtfeld kann dadurch fehlen, ohne dass eine Meldung erscheint.<\/li>\n<li>Ein <code>Date<\/code>-Objekt wird zu einer Zeichenkette im ISO-Format in UTC. Erwartet der Empf\u00e4nger ein anderes Datumsformat oder die Ortszeit, passt der Wert nicht.<\/li>\n<li><code>Map<\/code> und <code>Set<\/code> werden zu leeren Objekten.<\/li>\n<li>Ein <code>BigInt<\/code> l\u00f6st einen TypeError aus. Das ist der einzige laute Fall.<\/li>\n<\/ul>\n<p>Der Pr\u00fcfer aus dem Artikel erkennt davon nur, was im Text sichtbar bleibt. Ein fehlendes Feld oder ein null an falscher Stelle f\u00e4llt erst gegen das Schema des Empf\u00e4ngers auf.<\/p>\n<h3>Warum liest der Pr\u00fcfer Dezimalzahlen als Decimal statt als float?<\/h3>\n<p>Weil float jede Dezimalzahl in einen Bin\u00e4rwert umrechnet und viele Dezimalbr\u00fcche dabei nur angen\u00e4hert werden. Der Betrag 19,99 wird als float zu einem Wert knapp darunter, der bei der Ausgabe meist wieder als <code>19.99<\/code> erscheint, beim Rechnen aber abweicht; bekannt ist <code>0.1 + 0.2<\/code>, das <code>0.30000000000000004<\/code> ergibt. Ab 16 signifikanten Stellen kann ein Bin\u00e4rwert ein Literal nicht mehr zuverl\u00e4ssig wiedergeben; die Kennung 9007199254740993 aus dem Artikel zeigt das in JavaScript.<\/p>\n<p>Decimal \u00fcbernimmt das Literal so, wie es geschrieben ist. Damit lassen sich Regeln am geschriebenen Wert pr\u00fcfen, etwa h\u00f6chstens zwei Nachkommastellen bei einem Betrag; <code>Decimal(\"19.990\")<\/code> hat drei, obwohl es denselben Zahlenwert beschreibt. Ob ein sp\u00e4terer Empf\u00e4nger dieselbe Genauigkeit hat, bleibt dabei offen, wie der Artikel festh\u00e4lt.<\/p>\n<h3>L\u00e4sst sich eine zu gro\u00dfe Kennung nach JSON.parse noch retten?<\/h3>\n<p>Nicht aus dem geparsten Objekt. Die Zahl darin ist bereits auf den n\u00e4chsten darstellbaren Wert gerundet, aus 9007199254740993 wurde 9007199254740992, und keine sp\u00e4tere Umwandlung kennt die urspr\u00fcngliche Ziffer. Erhalten bleibt der Wert nur, wenn er vor dem Parsen aus dem Originaltext gelesen wird oder die Quelle ihn von vornherein als Zeichenkette liefert.<\/p>\n<\/div>\n<h2>Quellen<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc8259.html\">RFC 8259: JSON-Grammatik und Datenaustausch<\/a><\/li>\n<li><a href=\"https:\/\/docs.python.org\/3\/library\/json.html\">Python: Eingriffe und Grenzen beim JSON-Einlesen<\/a><\/li>\n<li><a href=\"https:\/\/jqlang.org\/manual\/\">jq: R\u00fcckgabecode, Eingabestrom und Zahlenverhalten<\/a><\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Number\/MAX_SAFE_INTEGER\">MDN: sicher darstellbare Ganzzahlen<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/structured-data\/intro-structured-data\">Google: strukturierte Daten pr\u00fcfen<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Eine lokale JSON-Pr\u00fcfung trennt Syntax, doppelte Namen und Zahlengenauigkeit von Anwendungsregeln. Ein getestetes Python-Beispiel erkennt verschachtelte Doppelungen und akzeptiert g\u00fcltige Einzelwerte, ohne die Nutzlast auszugeben.<\/p>\n","protected":false},"author":1,"featured_media":30210,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[156],"tags":[92214,92268,92235],"class_list":["post-13149","post","type-post","status-publish","format-standard","hentry","category-tutorials-de-web-entwicklung","tag-devops-de","tag-javascript-de","tag-tutorial-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tutorial: Ein JSON pr\u00fcfen, bevor es in ein Tag wandert | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Warum ein JavaScript-Objekt kein JSON ist, die f\u00fcnf Fehler mit Ausnahme und die zwei, die einen Wert ohne jede Warnung ver\u00e4ndern.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: Ein JSON pr\u00fcfen, bevor es in ein Tag wandert | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Warum ein JavaScript-Objekt kein JSON ist, die f\u00fcnf Fehler mit Ausnahme und die zwei, die einen Wert ohne jede Warnung ver\u00e4ndern.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-24T10:45:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-04T21:47:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-13147-13149.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/tutorials-de-web-entwicklung\\\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/tutorials-de-web-entwicklung\\\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tutorial: Ein JSON pr\u00fcfen, bevor es in ein Tag wandert\",\"datePublished\":\"2026-09-24T10:45:00+00:00\",\"dateModified\":\"2026-11-04T21:47:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/tutorials-de-web-entwicklung\\\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\\\/\"},\"wordCount\":1349,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/tutorials-de-web-entwicklung\\\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll2-13147-13149.png\",\"keywords\":[\"DevOps\",\"JavaScript\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/tutorials-de-web-entwicklung\\\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/tutorials-de-web-entwicklung\\\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/tutorials-de-web-entwicklung\\\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\\\/\",\"name\":\"Tutorial: Ein JSON pr\u00fcfen, bevor es in ein Tag wandert | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/tutorials-de-web-entwicklung\\\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/tutorials-de-web-entwicklung\\\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll2-13147-13149.png\",\"datePublished\":\"2026-09-24T10:45:00+00:00\",\"dateModified\":\"2026-11-04T21:47:46+00:00\",\"description\":\"Warum ein JavaScript-Objekt kein JSON ist, die f\u00fcnf Fehler mit Ausnahme und die zwei, die einen Wert ohne jede Warnung ver\u00e4ndern.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/tutorials-de-web-entwicklung\\\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/tutorials-de-web-entwicklung\\\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/tutorials-de-web-entwicklung\\\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll2-13147-13149.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/flux-voll2-13147-13149.png\",\"width\":1200,\"height\":630,\"caption\":\"Tutorial: Ein JSON pr\u00fcfen, bevor es in ein Tag wandert\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/tutorials-de-web-entwicklung\\\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: Ein JSON pr\u00fcfen, bevor es in ein Tag wandert\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tutorial: Ein JSON pr\u00fcfen, bevor es in ein Tag wandert | Lukas Wojcik","description":"Warum ein JavaScript-Objekt kein JSON ist, die f\u00fcnf Fehler mit Ausnahme und die zwei, die einen Wert ohne jede Warnung ver\u00e4ndern.","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:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: Ein JSON pr\u00fcfen, bevor es in ein Tag wandert | Lukas Wojcik","og_description":"Warum ein JavaScript-Objekt kein JSON ist, die f\u00fcnf Fehler mit Ausnahme und die zwei, die einen Wert ohne jede Warnung ver\u00e4ndern.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-24T10:45:00+00:00","article_modified_time":"2026-11-04T21:47:46+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-13147-13149.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tutorial: Ein JSON pr\u00fcfen, bevor es in ein Tag wandert","datePublished":"2026-09-24T10:45:00+00:00","dateModified":"2026-11-04T21:47:46+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/"},"wordCount":1349,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-13147-13149.png","keywords":["DevOps","JavaScript","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/","name":"Tutorial: Ein JSON pr\u00fcfen, bevor es in ein Tag wandert | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-13147-13149.png","datePublished":"2026-09-24T10:45:00+00:00","dateModified":"2026-11-04T21:47:46+00:00","description":"Warum ein JavaScript-Objekt kein JSON ist, die f\u00fcnf Fehler mit Ausnahme und die zwei, die einen Wert ohne jede Warnung ver\u00e4ndern.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-13147-13149.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/11\/flux-voll2-13147-13149.png","width":1200,"height":630,"caption":"Tutorial: Ein JSON pr\u00fcfen, bevor es in ein Tag wandert"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/tutorials-de-web-entwicklung\/tutorial-ein-json-prufen-bevor-es-in-ein-tag-wandert\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: Ein JSON pr\u00fcfen, bevor es in ein Tag wandert"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13149","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=13149"}],"version-history":[{"count":8,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13149\/revisions"}],"predecessor-version":[{"id":27036,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13149\/revisions\/27036"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/30210"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=13149"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=13149"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}