Zum Hauptinhalt springen

CSV zu YAML

Dieser Converter wandelt eine RFC 4180-CSV-Datei in eine YAML-Sequenz von Zuordnungen um, vollständig in Ihrem Browser. Spalten-Header werden zu Schlüsseln, und durch Punkte oder Klammern getrennte Header verschachteln sich in strukturiertes YAML. Die erste Zeile liefert die Schlüsselnamen, die Anführungszeichen folgen den jeweiligen Formatregeln, und nichts wird hochgeladen.

Nur lokal

CSV zu YAML erklärt

Eine CSV-Datei ist ein Raster; eine YAML-Datei ist ein Baum. Die Brücke zwischen ihnen ist der Header: jeder Spaltenname wird als Pfad im Datensatz, den er beschreibt, gelesen. Ein einfacher Header wie role wird zu einem einfachen Schlüssel, address.city baut eine address-Zuordnung mit einem city-Schlüssel darin auf, und tags[0] baut eine Liste – dieselbe Spaltenpfad-Konvention, die der YAML-zu-CSV-Converter der Site verwendet, nur rückwärts gelesen. Da die Abbildung explizit und umkehrbar ist, kommt eine Datei, die von CSV nach YAML und zurück konvertiert wird, unverändert an.

Die CSV-Seite wird gemäß RFC 4180 geparst: Komma-Trennzeichen, doppelte Anführungszeichen zur Escapewenn ein Feld ein Komma, Anführungszeichen oder einen Zeilenumbruch enthält, und mehrzeilige, in Anführungszeichen gesetzte Felder. Die Trennzeichen werden aus der Header-Zeile ermittelt – Komma, Semikolon, Tabulator oder Pipe – und nur außerhalb in Anführungszeichen gesetzter Bereiche gezählt, sodass ein Semikolon in einer Beschreibung die Ermittlung nicht stören kann. Die Typinferenz ist bewusst eng: nur Werte, die der JSON-Zahlengrammatik entsprechen, werden zu Zahlen, sodass eine Postleitzahl wie 02134 ihre führende Null behält.

Alts läuft in diesem Browser-Tab. Der CSV-Text, den Sie einfügen, wird von einer Seitenskript-Engine geparst, das YAML wird aus den geparsten Datensätzen ausgegeben, und beides berührt nicht das Netzwerk – öffnen Sie DevTools, sehen Sie zu, wie das Network-Panel schweigt, und der Anspruch bestätigt sich selbst.

Ein Hin-und-Her-Konvertieren ist auch die schnellste Korrektheitsprüfung, und der YAML-zu-CSV-Converter baut das Raster aus dem YAML mit denselben Spaltenpfaden wieder auf.

Wenn eine hartnäckige Exportdatei nicht so parst, wie Sie es erwarten, dann erklärt das RFC 4180-Regeln für Felder Anführungszeichen, CRLF und die Abweichungen, die echte Tabellenkalkulationsdateien enthalten.

Wie die Konvertierung tatsächlich funktioniert

Die Engine liest das Raster einmal und betrachtet den Rohtext nie wieder – alle späteren Entscheidungen werden anhand der geparsten Datensätze getroffen. Diese Reihenfolge ist es, die die Regeln zusammensetzbar hält: Spaltenpfade werden vor der Typinferenz erweitert, und Typen werden vor dem YAML-Generator inferiert, der entscheidet, was Anführungszeichen benötigt.

  • Parsen: Ein kleiner Zustandsautomat zerlegt den Text in Felder, beachtet doppelte Anführungszeichen und Zeilenumbrüche in Anführungszeichen gesetzten Feldern und entfernt eine führende Bytereihenfolge-Marke (BOM), falls vorhanden.
  • Benennen: Die erste Zeile wird zu den Spaltennamen; eine leere Header-Zelle wird zu column1, column2 usw.
  • Erweitern: Jeder Header wird als Pfad dekodiert – Punkte trennen Zuordnungsschlüssel, eckige Klammern markieren Array-Indizes – und jede Zeile wird als verschachtelter Datensatz neu aufgebaut.
  • Ausgeben: Die Datensätze werden als eine YAML-Sequenz serialisiert, mit Einrückungen aus zwei Leerzeichen, Werte nur dann in Anführungszeichen gesetzt, wenn die einfache Form falsch gelesen würde.

Was die Header-Namen bedeuten

Header sind der einzige Ort, an dem ein Raster Struktur ausdrücken kann, daher werden sie als Pfade und nicht undurchsichtige Labels gelesen. Der Punkt und die Klammer haben unterschiedliche Aufgaben, und der Unterschied ist es, der die Abbildung umkehrbar macht: Ein Punkt bedeutet immer einen Zuordnungsschlüssel, eine Klammer bedeutet immer einen Array-Index, also baut tags[0] eine Liste auf, während tags.0 eine Zuordnung mit dem Schlüssel „0“ aufbaut – nicht eine Liste. Ein Converter, der die beiden Schreibweisen austauschbar behandeln würde, würde raten, und die Hälfte der Zeit wäre die Vermutung falsch.

Header-ZeileErzeugtes YAML
address.cityeine address-Zuordnung mit einem city-Schlüssel darin
tags[0], tags[1]eine tags-Liste mit diesen beiden Elementen
tags.0eine tags-Zuordnung mit dem Zeichenketten-Schlüssel „0“ – keine Liste
roleein einfacher role-Schlüssel in jedem Datensatz

Zellen, Typen und leere Felder

Die Typinferenz existiert, um das YAML nützlich zu machen, und sie wird kurz gehalten. Eine Zelle wird nur dann zu einer Zahl, wenn sie der JSON-Zahlengrammatik entspricht – was führende Nullen verbietet – und sie wird nur bei den exakten Kleinschreibungen true, false oder null zu einem booleschen Wert. Alles andere bleibt eine Zeichenkette, einschließlich FALSE, +1, 0x10 und jeder Ganzzahl, die länger ist als der sichere Bereich, bei der Fließkommazahlen stumm Stellen kürzen würden. Eine leere Zelle wird als fehlendes Feld und nicht als leerer Wert behandelt, da CSV die beiden nicht unterscheiden kann und das Fehlen-als-abwesend-Lesen fast immer das ist, was eine lückenhafte Zeile bedeutet.

  • 02134 bleibt die Zeichenkette „02134“; 90210 wird zur Zahl 90210.
  • true und false werden zu booleschen Werten; FALSE in Großbuchstaben bleibt eine Zeichenkette.
  • Eine Zelle mit eingebetteten Zeilenumbrüchen wird zu einem YAML-Blockliteral, sodass die Zeilenstruktur erhalten bleibt.
  • Werte, die als Zahlen neu gelesen würden, werden in Anführungszeichen ausgegeben, was die rücklose Konvertierung verlustfrei hält.

Wo dieser Converter nicht raten will

Fehler werden mit einer Zeilennummer und einem Grund gemeldet, anstatt sie zu übertünchen, weil stilles Umformen der eine Fehler ist, von dem sich ein Datenwerkzeug nicht erholen kann. Drei Situationen werden genau so behandelt:

  • Ein nicht abgeschlossenes, in Anführungszeichen gesetztes Feld – ein doppeltes Anführungszeichen, das geöffnet und nie geschlossen wurde – bricht das Parsen in dieser Zeile ab.
  • Eine Zeile, deren Feldanzahl vom Header abweicht, wird trotzdem konvertiert, aber eine Warnung benennt die betroffenen Zeilen und gibt an, dass fehlende Felder als abwesend behandelt und überschüssige ignoriert werden.
  • Doppelte Spaltennamen werden konvertiert, wobei der rechts stehende Wert gewinnt, und die Warnung sagt das – entsprechend dem Verhalten eines Tabellenkalkulationsimports.

Häufig gestellte Fragen

Lädt das Konvertieren von CSV zu YAML meine Datei irgendwo hoch?

Nein. Sowohl das Parsen als auch die YAML-Generierung laufen in diesem Browser-Tab mit JavaScript, das einmal beim Öffnen der Seite geladen wurde. Es gibt keinen API-Endpunkt, an den Daten gesendet werden könnten, und die Content-Security-Policy der Seite setzt connect-src 'self', sodass der Browser selbst jede ausgehende Anfrage ablehnen würde. Sie können beide Behauptungen in DevTools überprüfen: das Network-Panel zeigt keine Anfrage beim Konvertieren.

Wie werden CSV-Header zu verschachtelten YAML-Schlüsseln?

Jeder Header wird als Pfad dekodiert: Punkte trennen Zuordnungsschlüssel und eckige Klammern markieren Array-Indizes, sodass address.city unter einem address-Schlüssel verschachtelt ist, während tags[0] eine Liste baut. Die Klammerform ist keine Dekoration – tags.0 stattdessen erstellt eine Zuordnung mit dem Zeichenketten-Schlüssel „0“, weil ein Punkt allein nicht sagen kann, ob die darunterliegende Ebene eine Liste oder ein Objekt ist. Die Unterscheidung der beiden Schreibweisen ist es, was die Konvention umkehrbar macht.

Was passiert mit Zahlen und Postleitzahlen in den Zellen?

Eine Zelle wird nur dann zu einer Zahl, wenn sie der JSON-Zahlengrammatik entspricht, was führende Nullen verbietet – also bleibt 02134 eine Zeichenkette, während 90210 zu einer Zahl wird. Ganzzahlen außerhalb des sicheren Bereichs bleiben ebenfalls Zeichenketten, anstatt Stellen zu verlieren. Boolesche Werte erfordern die exakten Kleinschreibungen true und false, und dasselbe gilt für null; FALSE in Großbuchstaben bleibt die Zeichenkette, die es offensichtlich ist.

Warum leere Zellen aus der YAML-Ausgabe verschwinden?

Eine leere Zelle wird als abwesender Schlüssel und nicht als leerer Wert ausgegeben. CSV kann nicht zwischen einem Feld, das wirklich leer ist, und einem, das eine Zeile einfach nicht hat, unterscheiden, und das Fehlen-als-abwesend-Lesen entspricht dem tatsächlich auftretenden lückenhaften Fall – einem Datensatz, der kürzer ist als die breiteste Zeile. Wenn ein nachgelagerter Verbraucher den Schlüssel benötigt, ist ein explizites, in Anführungszeichen gesetztes leeres Feld die Möglichkeit, dies anzufordern.

Welchen Einrückungsstil verwendet die YAML-Ausgabe?

Zwei Leerzeichen pro Ebene, die Konvention, die in Kubernetes, CI und Docker-Dateien verwendet wird, mit Bindestrichen für Sequenzen, die an ihrem übergeordneten Schlüssel und nicht darunter ausgerichtet sind. Mehrzeilige Zellen werden zu Blockliteralen, sodass eingebettete Zeilenumbrüche wörtlich erhalten bleiben, und das Dokument wird ohne führendes ----Kennzeichen ausgegeben, da eine Ein-Dokument-Datei keines benötigt.

Wie groß kann eine CSV-Datei sein, die dies verarbeiten kann?

Die praktische Grenze ist der Speicher dieses Tabs, nicht ein Upload-Limit – die Einfügebbox ist die Eingabe. Wie jedes Hauptwerkzeug dieser Seite gibt es eine dokumentierte Obergrenze von 8 MB; darüber wird die Verarbeitung mit einer klaren Meldung abgelehnt, anstatt die Seite einfrieren zu lassen. Für typische tabellarische Exporte sind das Zehntausende von Zeilen.