Cookies für Statistik und Werbung
Wir setzen Cookies für Statistik und Werbung ein, beides geht an Google. Wenn du ablehnst, ändert sich für dich sichtbar nichts.Zur Datenschutzseite
JSON kannst du hier kostenlos und ohne Konto in INI umwandeln: Datei oben ablegen, und ein, zwei Sekunden später steht das Ergebnis zum Herunterladen bereit. Die Umwandlung läuft in deinem eigenen Browser, die Datei wird also nie hochgeladen — das klappt unter Windows, macOS und Linux ebenso wie auf iPhone und Android, und es funktioniert selbst dann noch, wenn du das Netz abschaltest.
Bis zu 100 Dateien auf einmal. Gemischte Formate sind kein Problem.
Sie werden nacheinander umgewandelt und kommen zusammen als ZIP zurück.
JSON in INI
Das ist die ganze Umwandlung in einem Satz. Eine INI-Datei ist eine Liste von Sektionen mit flachen Schlüssel-Wert-Zeilen darin, und es gibt keine Möglichkeit, eine Sektion in eine Sektion zu legen. Das Format hat keine Spezifikation — es stammt aus dem Jahr 1985, aus einer Zeit, bevor die Idee eines Konfigurationsformats überhaupt eine brauchte — und jeder Parser hat leicht andere Vorstellungen von Anführungszeichen und Kommentaren.
JSON verschachtelt ohne Grenze. Die Umwandlung muss deshalb einen Baum auf zwei Ebenen projizieren, und die interessante Frage ist nicht, ob das funktioniert, sondern was mit der dritten Ebene und allem darunter passiert. Die kurze Antwort: Die Daten bleiben, die Struktur geht verloren — und das ist genau der richtige Tausch in der Richtung, in der eine Konfigurationsdatei normalerweise unterwegs ist.
Jeder oberste Schlüssel, dessen Wert ein Objekt ist, wird zu einer Sektion: Eine JSON-Datei mit den Objekten server, logging und database ergibt [server], [logging] und [database], mit den jeweiligen Schlüsseln darunter. Für Einstellungen, die ursprünglich von einer Person getippt wurden, trifft das oft genau — die Ausgabe ist die Datei, die man selbst geschrieben hätte.
Oberste Schlüssel mit einem einfachen Wert — ein Debug-Schalter, eine Versionsnummer — werden oberhalb der ersten Sektion geschrieben statt danach. Das ist keine Stilfrage: Eine INI-Sektion beansprucht jede folgende Zeile bis zur nächsten Überschrift, ein tiefer platzierter einfacher Schlüssel würde also zu einem Mitglied der vorangegangenen Sektion und seine Bedeutung ändern.
Eine dritte Verschachtelungsebene wird als Schlüssel mit Punkt geschrieben. Enthält server ein Objekt tls mit einem Zertifikatspfad, ergibt das eine Sektion [server] mit einer Zeile tls.cert. Nichts geht verloren, der Weg zurück zur ursprünglichen Form steckt im Schlüsselnamen selbst.
Manche Parser kennen diese Konvention und bauen die Verschachtelung daraus wieder auf, die meisten nicht und behandeln tls.cert schlicht als Schlüssel, der zufällig einen Punkt enthält. Für das Lesen einer Einstellung genügt beides meist. Nicht rückwärts eindeutig ist es dagegen, wenn ein JSON-Schlüssel selbst tatsächlich einen Punkt im Namen trägt — der wird ununterscheidbar von einer Verschachtelungsebene.
Der Schlüssel bleibt, der Wert nicht: Ein null-Wert wird zu Schlüssel, Gleichheitszeichen und nichts dahinter. Das ist die nächstliegende Entsprechung, die INI für einen nicht gesetzten Wert hat, weil das Format kein eigenes Null kennt.
Was der eigene Parser damit macht, unterscheidet sich, und das lohnt eine kurze Prüfung. Pythons configparser liefert eine leere Zeichenkette zurück. Manche Leser tun dasselbe, werten sie aber in einem Wahrheitswert-Kontext als falsch, und ein paar überspringen den Schlüssel ganz. Hängt vom Unterschied zwischen „auf nichts gesetzt" und „gar nicht gesetzt" etwas im Programm ab, sind solche Zeilen von Hand zu löschen, statt die Mehrdeutigkeit auszuliefern.
INI kennt keine Liste. Ein Array mit drei erlaubten Rechnernamen wird zu drei Zeilen mit den Schlüsseln 0, 1 und 2, was jeden Wert erhält und fast keiner Parser-Konvention entspricht. Formate, die Listen unterstützen, erwarten meist eine Zeile mit kommagetrennten Werten, manche denselben Schlüssel mehrfach.
Das ist der eine Teil der Umwandlung, der sich vorher in der JSON-Datei lohnt zu ändern statt hinterher in der INI-Datei. Das Array vor dem Umwandeln zu einer einzigen Zeichenkette mit dem vom Programm erwarteten Trennzeichen zusammenzufügen ergibt eine Zeile, die der Parser direkt liest. In der anderen Reihenfolge bedeutet es, jede nummerierte Gruppe von Hand zu bearbeiten.
Ein oberstes JSON-Array ergibt Sektionen, die nach ihrer Position im Array benannt sind: [0], [1], [2], jede mit den Schlüsseln eines Datensatzes. Die Datei ist syntaktisch gültiges INI, und es gibt kein sinnvolles Programm, das sie liest.
Diese Ausgabe ist eher ein Hinweis als ein Fehlschlag. INI ist ein Konfigurationsformat — eine Menge benannter Einstellungen für eine Anwendung —, und eine Liste von Datensätzen sind Daten. Liegt eine Liste vor, ist CSV oder eine Tabelle das richtige Ziel, wenn eine Person sie liest, und JSON oder eine Datenbank, wenn ein Programm sie liest. Ein einzelner Datensatz konvertiert weiterhin sinnvoll; eine Reihe durchnummerierter Sektionen bedeutet, dass die Antwort auf die ursprüngliche Frage nein war.
Fast jeder Wert wird genau so geschrieben, wie er dasteht — ein Pfad, ein Rechnername, ein Port, ein Schalter —, was die Datei wie eine von Hand getippte aussehen lässt. Drei Arten von Werten werden anders behandelt: ein Wert mit Zeilenumbruch, ein Wert, der bereits mit Anführungszeichen beginnt und endet, und ein Wert mit Leerzeichen oder Tabulator am Rand. Diese drei werden in doppelte Anführungszeichen gesetzt, und darin steht ein Zeilenumbruch als Backslash-n und ein Backslash als zwei Backslashes.
Diese Maskierung schützt vor genau dem Fehler, der ohne sie entstünde: Ein Wert mit echtem Zeilenumbruch würde sonst neue INI-Zeilen erzeugen und könnte den nächsten Schlüssel in eine Sektion hineinziehen, die in der Quelle gar nicht existierte. Ein Passwortfeld mit einem versehentlich eingefügten Zeilenumbruch bleibt dadurch ein einzelner Wert statt zwei fremde Zeilen. Ein Parser, der diese Maskierung nicht kennt, bekommt statt eines Zeilenumbruchs die beiden Zeichen Backslash und n zurück — ein Zertifikat oder ein eingebettetes Skript gehört deshalb ohnehin in eine eigene Datei, auf die die INI nur mit einem Pfad verweist.
INI speichert alles als Text. Ein JSON-true wird als true geschrieben, ein JSON-8080 als 8080, und was das anschließend bedeutet, entscheidet allein das lesende Programm. Pythons configparser macht das mit getboolean und getint ausdrücklich, und akzeptiert dabei auch yes, on und 1 als wahr.
Es lohnt sich, vorher zu wissen, in welche Richtung der eigene Parser rät. Eine Versionsangabe wie 1.0 ist im JSON Text und wird beim Zurücklesen sehr wahrscheinlich als Zahl behandelt, eine Build-Kennung mit führenden Nullen verliert diese, sobald irgendetwas sie als Ganzzahl liest. Wo das stört, liegt die Korrektur im lesenden Programm, nicht in der Datei.
Die Ausgabe trägt keine Kommentare, weil JSON keine kennt. INI unterstützt sie — eine Zeile, die mit Semikolon oder Raute beginnt — und dieser Konverter liest beides in der anderen Richtung ein.
Da der Sinn des Umzugs nach INI meist ist, dass danach ein Mensch die Datei bearbeitet, lohnen sich Kommentarzeilen sofort nach dem Umwandeln: welche Werte umgebungsspezifisch sind, welcher Wert an anderer Stelle übereinstimmen muss, welche Sektion die Anwendung ignoriert. Genau das kann eine automatisch erzeugte JSON-Datei nie festhalten.
Das Einlesen der JSON-Datei und das Schreiben der INI-Datei geschehen als JavaScript in diesem Tab. Die Datei wird nicht hochgeladen, es gibt kein Konto und keine Warteschlange, und die kostenlose Nutzung erlaubt bis zu 100 MB — mehrere Größenordnungen mehr, als eine Konfigurationsdatei je braucht.
Der Datenschutzpunkt ist bei diesem Paar keine Nebensächlichkeit. Konfigurationsdateien tragen Datenbankverbindungen, API-Endpunkte, interne Rechnernamen und öfter, als jemand zugeben würde, ein Passwort, das eigentlich in eine Umgebungsvariable gehörte. Eine solche Datei irgendwo auf einem fremden Server umzuwandeln, hieße, all das ohne jeden Nutzen an einen Dritten zu übergeben.
| JSON | INI | |
|---|---|---|
| Vollständiger Name | JavaScript Object Notation | INI-Konfiguration |
| Dateiendung | .json | .ini, .cfg, .conf |
| Medientyp | application/json | text/plain |
| Erstmals veröffentlicht | 2001 | 1985 |
| Spezifikation | RFC 8259 | — |
| Lizenzlage | Offener Standard | Offener Standard |
| Heutiger Stand | Aktuell | Alt, wird überall noch gelesen |
| Öffnet im Browser | Jeder Browser | Kein Browser |
| Stattdessen erwogen | XML, YAML, NDJSON | TOML, YAML |
Kein Browser liest INI. Damit ist es das unhandlichere der beiden. Prüfe lieber vorher, ob die Gegenstelle es annimmt.
Visual Studio Code liest sowohl JSON als auch INI — du kannst das Ergebnis also gegen das Original prüfen, ohne ein zweites Programm zu brauchen.
Die beiden zielen auf verschiedene Arbeit: JSON auf den Austausch zwischen Programmen und das Web, INI auf die Bearbeitung. Das lohnt sich vorher abzuwägen — der Grund, aus dem es das eine gibt, ist meist der Grund, aus dem das andere unpraktisch ist.
JSON wurde 2001 veröffentlicht. Festgehalten ist das in RFC 8259 — lohnt sich zu kennen, wenn die Datei das Programm überleben soll, das sie geschrieben hat.
INI stammt aus 1985. Notepad und Visual Studio Code lesen das Format.
INI wurde 1985 veröffentlicht, JSON 2001. Das ältere ist in der Regel die sicherere Datei zum Weitergeben, das jüngere erledigt dieselbe Aufgabe mit weniger Bytes.
Nein. Diese Umwandlung läuft vollständig in deinem Browser, die Datei verlässt dein Gerät also nicht. Du kannst das selbst nachprüfen: Öffne den Netzwerk-Tab der Entwicklerwerkzeuge und wandle etwas um. Zu sehen sind die Seite selbst und die Statistik- und Werbeanfragen, mit denen dieser Dienst bezahlt wird — und keine einzige, die deine Datei trägt.
Ja. Kein Konto, kein Wasserzeichen und kein Tageskontingent, das sich verbraucht — es läuft auf deinem eigenen Rechner, du darfst also so oft wiederkommen, wie du willst. Dateien bis 100 MB verarbeitet der Browser, 100 auf einmal.
JSON und INI beschreiben Inhalte auf grundverschiedene Weise. Die Umwandlung ist deshalb ein Nachbau und keine Kopie: originalgetreu, aber nicht Byte für Byte dasselbe. INI kennt keine Verschachtelung. Alles tiefer als eine Ebene wird zu Schlüsseln mit Punkten zusammengezogen.
Kein Browser liest INI. Damit ist es das unhandlichere der beiden. Prüfe lieber vorher, ob die Gegenstelle es annimmt.