INI-JSONkonverter

How-to · 8 Min. Lesezeit

Verschachtelte INI-Sektionen in JSON abbilden: so funktioniert die Punktnotation

Wie aus einer INI-Sektion [a.b.c] ein verschachteltes JSON-Objekt wird, wie der Konverter die Punktnotation auflöst, wie der Rückweg JSON nach INI funktioniert und wo die Grenzen tiefer Verschachtelung liegen.

Mateusz Viola
Mateusz Viola Veröffentlicht Geprüft

Kurz gesagt

Klassisches INI ist flach: eine Ebene von Sektionen. JSON kann dagegen beliebig tief verschachteln. Die Brücke zwischen beiden ist die Punktnotation: Eine Sektion wie [server.database] wird beim Umwandeln in das verschachtelte Objekt server → database aufgelöst. Diese Auflösung ist eine abschaltbare Option. Ist sie aus, bleibt der Punkt Teil eines flachen Schlüssels. Der Rückweg JSON nach INI macht aus verschachtelten Objekten wieder Punkt-Sektionen. Sehr tiefe oder gemischte Strukturen passen nicht sauber in INI, das Tool sagt das klar.

Flaches INI trifft verschachteltes JSON

Eine INI-Datei ist im Kern flach aufgebaut. Es gibt eine Ebene von Sektionen in eckigen Klammern, und in jeder Sektion stehen Schlüssel-Wert-Paare. Eine Sektion innerhalb einer Sektion ist im klassischen INI nicht vorgesehen. JSON dagegen lebt von der Verschachtelung: Ein Objekt kann ein weiteres Objekt enthalten, das wiederum ein Objekt enthält, theoretisch beliebig tief.

Beim Umwandeln entsteht damit eine Brücke, die überwunden werden muss. Wie bekommt man eine flache INI-Struktur in ein potenziell tief verschachteltes JSON, und umgekehrt? Die verbreitete Antwort ist die Punktnotation im Sektionsnamen. Was INI und JSON sonst noch unterscheidet, lesen Sie im Ratgeber INI oder JSON? Der Unterschied.

Was die Punktnotation bedeutet

Bei der Punktnotation enthält der Name einer Sektion einen oder mehrere Punkte, die jeweils eine zusätzliche Ebene andeuten. Statt einer einfachen Sektion [server] schreiben Sie etwa:

[server]
name=Produktion

[server.database]
host=localhost
port=5432

[server.cache]
host=127.0.0.1
ttl=300

Der Punkt in server.database sagt: database ist eine Untergruppe von server. Genauso ist server.cache eine zweite Untergruppe. Diese Schreibweise ist menschlich gut lesbar und in vielen Konfigurationen verbreitet. Ein Konverter, der sie versteht, kann daraus echte JSON-Verschachtelung erzeugen.

So löst der Konverter die Punkte auf

Ist die Option verschachtelte Sektionen auflösen aktiv, geht der Konverter so vor: Er teilt jeden Sektionsnamen am Punkt in einzelne Bestandteile. Aus server.database werden die Ebenen server und database. Dann legt er die Objekte ineinander an und schreibt die Schlüssel-Wert-Paare der Sektion in das innerste Objekt. Aus dem Beispiel oben wird:

{
  "server": {
    "name": "Produktion",
    "database": {
      "host": "localhost",
      "port": 5432
    },
    "cache": {
      "host": "127.0.0.1",
      "ttl": 300
    }
  }
}

Beachten Sie, wie name direkt unter server liegt, während database und cache eigene Unterobjekte sind. Der Konverter geht intern Pfad für Pfad vor und stellt sicher, dass jede Zwischenebene als Objekt existiert, bevor er die Werte einträgt. Ob port und ttl als Zahl oder String erscheinen, steuert die Typ-Heuristik, die im Ratgeber INI-Datentypen in JSON ausführlich erklärt wird.

Verschachtelung ein oder aus im Vergleich

Die Auflösung der Punktnotation ist bewusst abschaltbar, weil nicht jeder den gleichen Bedarf hat. Die folgende Tabelle zeigt, was aus der Sektion [server.database] mit dem Schlüssel host=localhost wird:

Option JSON-Ergebnis Wann sinnvoll
Verschachtelung ein { "server": { "database": { "host": "localhost" } } } Programm erwartet echte Objekt-Hierarchie
Verschachtelung aus { "server.database": { "host": "localhost" } } Programm erwartet flache Schlüssel mit Punkten

Mit ausgeschalteter Option ist der Punkt einfach Teil des Schlüsselnamens. Manche Konfigurationssysteme, etwa solche, die mit flachen Schlüsseln wie spring.datasource.url arbeiten, erwarten genau das. Prüfen Sie, was das Zielprogramm braucht, bevor Sie umwandeln.

Der Rückweg: JSON nach INI

Der Konverter funktioniert in beide Richtungen. Beim Weg von JSON nach INI kehrt sich die Logik um: Verschachtelte Objekte werden zu Punkt-Sektionen. Nehmen wir dieses JSON:

{
  "app": {
    "name": "Shop",
    "server": {
      "host": "localhost",
      "port": 8080
    }
  }
}

Mit aktivierter Punkt-Sektion-Option erzeugt der Konverter daraus folgendes INI:

[app]
name=Shop

[app.server]
host=localhost
port=8080

Skalare Werte direkt unter app (hier name) landen in der Sektion [app], das verschachtelte Objekt server wird zur eigenen Sektion [app.server]. Den vollständigen Ablauf in dieser Richtung beschreibt der Ratgeber JSON in INI umwandeln.

Arrays und mehrfache Schlüssel

Neben Objekten kann JSON auch Arrays enthalten. Ein Array einfacher Werte wird beim Weg nach INI zu mehrfachen Schlüsseln oder zur Klammer-Schreibweise key[]=. Aus diesem JSON:

{
  "firewall": {
    "allow": ["10.0.0.1", "10.0.0.2", "10.0.0.3"]
  }
}

wird in INI:

[firewall]
allow[]=10.0.0.1
allow[]=10.0.0.2
allow[]=10.0.0.3

Auf dem Hinweg von INI nach JSON werden mehrfach vorkommende Schlüssel oder die key[]-Schreibweise wieder zu einem Array zusammengefasst. So bleibt eine Liste über die Umwandlung erhalten. Wichtig: Ein Array von Objekten lässt sich nicht so einfach in INI ausdrücken, denn dafür fehlt INI die Syntax. Hier stösst das Format an seine Grenze.

Grenzen sehr tiefer Verschachtelung

Die Punktnotation ist praktisch, aber sie hat klare Grenzen. INI ist für flache bis mittlere Strukturen gemacht, nicht für tiefe Hierarchien. Mehrere Fälle passen schlicht nicht sauber:

  • Sehr tiefe Hierarchien: Eine Sektion [a.b.c.d.e.f] ist zwar technisch möglich, aber unübersichtlich. Solche Strukturen sind in JSON oder YAML besser aufgehoben.
  • Mischformen: Wenn ein Schlüssel in JSON gleichzeitig einen direkten Wert und ein Unterobjekt hätte, lässt sich das in INI nicht abbilden, weil ein Sektionsname nicht zugleich ein Wert sein kann.
  • Arrays von Objekten: Eine Liste, deren Einträge selbst Objekte sind, hat in INI keine natürliche Entsprechung.
  • Array als Wurzel: Ein JSON, dessen oberste Ebene ein Array oder ein einzelner Wert ist, kann nicht als INI geschrieben werden, denn INI braucht oben Schlüssel-Wert-Paare oder Sektionen.

Der entscheidende Punkt: Unser Konverter erzeugt in solchen Fällen nicht still etwas Falsches, sondern weist klar darauf hin, dass die Struktur nicht sauber in INI passt. So merken Sie sofort, wenn JSON und INI an dieser Stelle nicht zusammenpassen, statt später ein fehlerhaftes Ergebnis zu verwenden. Wenn Ihre Daten regelmässig tief verschachtelt sind, ist möglicherweise ein anderes Format die bessere Wahl, ein Vergleich findet sich im Ratgeber INI, YAML oder JSON.

Schritt für Schritt im Konverter

So bilden Sie verschachtelte Sektionen konkret ab:

  1. Öffnen Sie den Konverter und wählen Sie die Richtung INI nach JSON (oder umgekehrt für den Rückweg).
  2. Fügen Sie Ihre INI mit Punkt-Sektionen ein, wählen Sie eine Datei aus oder ziehen Sie sie per Drag-and-drop ins Feld.
  3. Öffnen Sie die erweiterten Optionen und aktivieren Sie verschachtelte Sektionen auflösen.
  4. Wählen Sie bei Bedarf die JSON-Einrückung (2 Leerzeichen, 4, Tab oder kompakt) und ob Werte typisiert werden sollen.
  5. Prüfen Sie das Ergebnis in der Live-Vorschau und kopieren oder laden Sie es herunter.

Alles läuft dabei zu 100 Prozent lokal in Ihrem Browser, ohne Upload, ohne Anmeldung und ohne Limit. Ihre Konfigurationsdatei, die durchaus sensible Werte enthalten kann, verlässt Ihr Gerät nicht.

Häufige Fragen

Wie bildet INI Verschachtelung ab?

Klassisches INI ist flach. Tiefere Strukturen werden über die Punktnotation angedeutet, etwa [server.database]. Der Punkt signalisiert eine Verschachtelung, die ein Konverter in ein verschachteltes JSON-Objekt auflösen kann.

Wie löst der Konverter die Punktnotation auf?

Er teilt den Sektionsnamen am Punkt in Ebenen. Aus [server.database] wird ein Objekt server mit innerem Objekt database. Die Schlüssel-Wert-Paare landen im innersten Objekt.

Was passiert, wenn ich die Verschachtelung ausschalte?

Dann bleibt der Sektionsname ein flacher Schlüssel. Aus [server.database] wird ein Feld server.database, der Punkt ist Teil des Schlüssels. Sinnvoll, wenn das Zielprogramm flache Schlüssel erwartet.

Funktioniert der Rückweg von JSON nach INI?

Ja. Verschachtelte Objekte werden wieder zu Punkt-Sektionen, aus server mit innerem database wird [server.database]. Sehr tiefe oder gemischte Strukturen passen aber nicht sauber, das Tool weist darauf hin.

Wo liegen die Grenzen tiefer Verschachtelung?

INI ist für flache bis mittlere Strukturen gedacht. Sehr tiefe Hierarchien, Mischformen aus Wert und Unterobjekt sowie Arrays von Objekten passen nicht sauber. Dann sind JSON oder YAML besser geeignet.

Weiterführende Artikel

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige