INI-JSONkonverter

Grenzen · 8 Min. Lesezeit

INI-Datentypen in JSON: was bei Zahlen, true/false und Strings passiert

INI speichert alles als Text. Beim Umwandeln in JSON entscheidet eine Typ-Heuristik über Zahlen, true/false und Strings. Wann sie hilft, wann sie daneben liegt und wie Sie sie verlustfrei abschalten.

Eike-Christian Ramcke
Eike-Christian Ramcke Veröffentlicht Geprüft

Kurz gesagt

In einer INI-Datei ist jeder Wert reiner Text. Ob 123 eine Zahl oder eine Versionsnummer ist, weiß die Datei nicht. JSON dagegen kennt echte Datentypen. Beim Umwandeln entscheidet eine abschaltbare Typ-Heuristik: true und false werden zu Booleans, reine Zahlen zu JSON-Zahlen, alles andere bleibt String. Die Heuristik ist praktisch, kann aber bei führenden Nullen, Versionsnummern und langen IDs danebenliegen. Wer verlustfreie Strings braucht, schaltet sie aus, dann bleibt jeder Wert garantiert Text.

INI speichert alles als Text

Der wichtigste Satz dieses Artikels lautet: Eine INI-Datei hat keine Datentypen. Eine INI ist eine reine Textdatei, in der jeder Wert hinter dem Gleichheitszeichen schlicht eine Zeichenkette ist. Betrachten Sie dieses Beispiel:

[server]
port=8080
debug=true
version=1.0
plz=04109
name=Produktionsserver

Für die INI-Datei sind 8080, true, 1.0 und 04109 allesamt Text. Sie unterscheiden sich nicht von Produktionsserver. Erst ein Programm, das diese Datei einliest, gibt den Werten eine Bedeutung. PHP würde port vielleicht als Ganzzahl behandeln, ein anderes Programm als String. Diese Mehrdeutigkeit ist der Kern des Problems beim Umwandeln in ein typisiertes Format wie JSON. Grundsätzliches zum INI-Aufbau erklärt der Ratgeber Was ist eine INI-Datei?.

Welche Datentypen JSON kennt

JSON ist da deutlich präziser. Die Spezifikation kennt sechs Werttypen, von denen vier hier relevant sind:

  • String: Text in doppelten Anführungszeichen, etwa "Produktionsserver".
  • Number: Eine Zahl ohne Anführungszeichen, etwa 8080 oder 3.14.
  • Boolean: Die Wahrheitswerte true und false, ohne Anführungszeichen.
  • null: Das Fehlen eines Werts (in INI nicht vorhanden).

Der Unterschied zwischen "8080" (String) und 8080 (Zahl) ist in JSON bedeutsam: Ein Programm, das das JSON liest, behandelt sie verschieden. Genau hier muss der Konverter beim Umwandeln eine Entscheidung treffen, denn die INI gibt den Typ nicht vor.

So funktioniert die Typ-Heuristik

Eine Heuristik ist eine Faustregel, die in den meisten Fällen das Richtige tut. Bei eingeschalteter Option Werte typisieren wendet unser Konverter diese Regel auf jeden einzelnen Wert an:

  1. Steht der Wert in umschließenden Anführungszeichen? Dann entferne sie und behandle ihn immer als String.
  2. Ist der Wert exakt true oder false? Dann mache daraus einen Boolean.
  3. Besteht der Wert ausschließlich aus Ziffern, optional mit einem Vorzeichen und genau einem Dezimalpunkt? Dann mache daraus eine Zahl.
  4. In allen anderen Fällen bleibt der Wert ein String.

Aus dem Beispiel oben wird mit eingeschalteter Heuristik also dieses JSON:

{
  "server": {
    "port": 8080,
    "debug": true,
    "version": 1,
    "plz": 4109,
    "name": "Produktionsserver"
  }
}

port und debug sind sauber typisiert. Doch bei version und plz hat die Heuristik bereits danebengegriffen, dazu gleich mehr.

Heuristik im Überblick

Diese Tabelle zeigt, was aus typischen INI-Werten wird, einmal mit eingeschalteter und einmal mit ausgeschalteter Heuristik:

INI-Wert Heuristik ein Heuristik aus
8080 8080 (Zahl) "8080" (String)
true true (Boolean) "true" (String)
3.14 3.14 (Zahl) "3.14" (String)
1.0 1 (Zahl, Null weg!) "1.0" (String)
04109 4109 (Null weg!) "04109" (String)
Produktionsserver "Produktionsserver" "Produktionsserver"

Bei eindeutigen Fällen wie 8080, true oder einem normalen Text liefert die Heuristik genau das gewünschte Ergebnis. Die Probleme stecken in den Zeilen 1.0 und 04109.

Wann die Heuristik daneben liegt

Eine Faustregel ist nur eine Faustregel. Es gibt mehrere wiederkehrende Fälle, in denen ein Wert wie eine Zahl aussieht, aber als Text gemeint ist:

Führende Nullen

Postleitzahlen wie 04109 (Leipzig), Kontonummern oder Artikel-IDs beginnen oft mit einer Null. Wird ein solcher Wert als Zahl interpretiert, verschwindet die führende Null: Aus 04109 wird 4109. Der Wert ist damit faktisch verfälscht, denn eine Postleitzahl ist eine feste fünfstellige Zeichenfolge, keine Rechengrösse.

Versionsnummern

Eine Version 1.0 sieht aus wie eine Dezimalzahl. Als Zahl interpretiert wird daraus 1, die abschließende Null geht verloren und die Versionssemantik mit ihr. Noch deutlicher: 1.2.3 ist keine gültige Zahl (zwei Punkte) und bleibt korrekt ein String, 1.0 dagegen wird fälschlich zur Zahl. Versionen gehören deshalb als String behandelt.

Sehr lange Zahlen und IDs

JSON-Zahlen werden in vielen Programmiersprachen als 64-Bit-Gleitkommazahl verarbeitet. Sehr lange Ziffernfolgen, etwa eine 20-stellige Transaktions-ID oder eine Kreditkartennummer, überschreiten die sichere Genauigkeit (rund 15 bis 16 Stellen). Dann kann die Zahl gerundet werden und stimmt nicht mehr exakt. Solche Identifikatoren sind nie zum Rechnen gedacht und gehören als String erhalten.

Telefonnummern und IBANs

Eine Telefonnummer mit führender Null oder Pluszeichen, eine IBAN mit Buchstaben oder eine Nummer mit Bindestrichen ist ohnehin kein reiner Zahlenwert und bleibt String. Gefährlich sind nur die Fälle, die zufällig wie eine saubere Zahl aussehen.

Merksatz

Wenn ein Wert zwar aus Ziffern besteht, aber nie zum Rechnen gedacht ist (Postleitzahl, Version, Telefonnummer, ID), behandeln Sie ihn als String. Schalten Sie die Typ-Heuristik aus oder setzen Sie den Wert in der INI in Anführungszeichen.

Heuristik abschalten für sichere Strings

Wenn Ihnen Genauigkeit wichtiger ist als hübsch typisiertes JSON, schalten Sie die Heuristik einfach aus. In den erweiterten Optionen des Konverters deaktivieren Sie Werte typisieren. Danach gilt eine einzige, glasklare Regel: Jeder Wert bleibt ein String.

Aus port=8080 wird dann "port": "8080", aus plz=04109 wird "plz": "04109" mit erhaltener führender Null. Diese Variante ist verlustfrei: Kein Wert wird verändert, gerundet oder gekürzt. Sie ist die sichere Wahl, wenn Sie nicht jede Zeile einzeln prüfen wollen und Korrektheit garantiert haben möchten. Den vollständigen Weg vom INI zum JSON zeigt der Ratgeber INI in JSON umwandeln.

Einen String gezielt erzwingen

Manchmal wollen Sie die meisten Werte typisieren, aber einzelne empfindliche Werte schützen. Das geht, ohne die Heuristik komplett abzuschalten: Setzen Sie den betroffenen Wert in der INI-Datei in Anführungszeichen.

[app]
port=8080         ; wird zur Zahl 8080
version="1.0"     ; bleibt String "1.0"
plz="04109"       ; bleibt String "04109"

Der Konverter erkennt die umschließenden Anführungszeichen, entfernt sie und behandelt den Inhalt als String, auch bei eingeschalteter Heuristik. So bekommen Sie das Beste aus beiden Welten: typisierte Zahlen dort, wo es passt, und garantierte Strings dort, wo es nötig ist.

Empfehlung nach Anwendungsfall

Ihr Ziel Empfehlung
JSON soll von einem Programm typgerecht gelesen werden Heuristik ein, empfindliche Werte mit Anführungszeichen schützen
Datei enthält Postleitzahlen, IDs oder Versionen Heuristik aus (alles String) für garantierte Korrektheit
Reine Konfiguration mit Ports und Flags Heuristik ein, sauberes typisiertes JSON
Unsicher, was drinsteht Heuristik aus, im Zweifel verlustfrei

Egal welche Einstellung Sie wählen: Die Umwandlung läuft zu 100 Prozent lokal in Ihrem Browser, ohne Upload und ohne Anmeldung. Probieren Sie beide Varianten direkt im INI-zu-JSON-Konverter aus und vergleichen Sie das Ergebnis in der Vorschau.

Häufige Fragen

Speichert INI Datentypen?

Nein. In einer INI-Datei ist jeder Wert reiner Text. Ob 123 eine Zahl oder eine ID ist, ist nicht festgelegt. Erst das einlesende Programm interpretiert den Wert. JSON kennt dagegen echte Typen.

Was macht die Typ-Heuristik?

Sie macht aus true und false echte Booleans, aus reinen Zahlen JSON-Zahlen, alles andere bleibt String. So entsteht aussagekräftiges, typisiertes JSON statt durchgehend Text.

Wann liegt die Heuristik daneben?

Bei führenden Nullen (04109), Versionen (1.0), Telefonnummern und sehr langen IDs. Dort kann die führende Null entfallen oder die Zahl gerundet werden. Schalten Sie die Heuristik dann aus.

Wie schalte ich die Heuristik aus?

In den erweiterten Optionen deaktivieren Sie Werte typisieren. Dann bleibt jeder Wert ein String, verlustfrei und sicher.

Werden Werte in Anführungszeichen anders behandelt?

Ja. Ein Wert wie version="1.0" verliert die Anführungszeichen und bleibt String, auch bei eingeschalteter Heuristik. So erzwingen Sie gezielt einen String für einzelne Werte.

Weiterführende Artikel

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige