Ist CSV eine gute Alternative zu XML und JSON? [geschlossen]

22

Ist CSV eine gute Option gegen XML und JSON für Programmiersprachen?

Im Allgemeinen verwende ich XML und JSON (oder manchmal eine reine Textdatei) als Flatfile-Speicher. Kürzlich bin ich jedoch auf eine CSV-Implementierung in PHP gestoßen . Ich habe im Allgemeinen gesehen, dass CSV für Eingaben in Excel- Dateien verwendet wird, aber ich habe es nie mit der Programmierung verwendet. Wäre es in irgendeiner Weise besser als XML oder JSON?

Vishwas G
quelle
3
Diese Aussage ist vage. Sind Sie fragen, ob CSV ein besseres Format als Speichersystem macht, oder fragen Sie , ob es irgendwelche Gründe CSV zu verwenden , über XML / JSON?
GroßmeisterB
4
Jede CSV-Nachrichtenstruktur kann einem XML- oder JSON-Nachrichtenformat zugeordnet werden. Nicht alle XML / JSON-Nachrichtenformate können CSV zugeordnet werden. Daher deckt CSV nur einen bestimmten Datenverwendungsfall ab, nämlich das Tabellenformat, bei dem JSON und XML komplexere Nachrichtenstrukturen abdecken können.
Jon Raynor
@ JonRaynor: Ich denke, jedes XML- oder JSON-Format kann CSV zugeordnet werden - aber nicht sauber. Sie müssten eine Art der Darstellung der Baumstruktur erfinden. Das Ergebnis wäre hässlich und mit ziemlicher Sicherheit nicht umsetzbar. Für fast alle praktischen Zwecke haben Sie Recht.
Keith Thompson
@ KeithThompson es wurde erfunden :)
Eliran Malka

Antworten:

41

Die Antwort ist, es kommt darauf an.

CSV eignet sich hervorragend für bestimmte Anwendungsfälle. Als "Streaming" -Format für große Datasets ist das Streaming beispielsweise einfacher als bei XML / JSON, und CSV-Dateien belegen viel weniger Speicherplatz. Ich verwende es, um Datensätze im Gigabyte-Bereich zu streamen, wo andere Formate unpraktisch sind.

Es ist auch in bestimmten Branchen sehr verbreitet, wenn es um Altsysteme und Workflows geht. Versuchen Sie, JSON in MS Excel zu importieren.

Der ODI äußerte sich kürzlich zu CSV und nannte 2014 "Das Jahr der CSV".

Verwenden Sie für eine "richtige" CSV-Formatierung den CSV-Mime-Typ in Ihren HTTP-Antworten.

tom
quelle
2
+1 für ältere Systeme; Während das Altsystem die CSV möglicherweise nicht bestimmungsgemäß verwendet (ich musste mich kürzlich mit dem Import einer CSV befassen, die ehrlich gesagt ein Bericht und keine Tabelle war), müssen wir uns weltweit mit Altsysteminformationen befassen .
Brian S
1
CSV hat den Streaming-Vorteil, der eine große Rolle spielt: Der CSV-Parser hat viel weniger Status als die JSON- oder XML-Parser.
Matt
22

Mit Sicherheit nicht.

CSV ist ein Tabellenformat, das Datensätzen oder anderen Tabellendaten sehr gut zugeordnet werden kann. Es sind jedoch nicht alle Daten tabellarisch! Im Allgemeinen möchten wir Objektgraphen serialisieren . Dies kann in folgenden Fällen schwierig sein:

  • Zirkelverweise
  • geteilte Untergraphen (zB zwei Objekte, die dasselbe Objekt wie ein Mitglied enthalten)
  • Objekte unterschiedlicher Typen, die in dasselbe Dokument serialisiert werden sollen

Wir möchten weiterhin in der Lage sein, die Objekte zuverlässig aus unserem Speicherformat zu deserialisieren.

XML

Ist in erster Linie eine erweiterbare Auszeichnungssprache . Es kann mit einem Schuhanzieher versehen werden, um auch allgemeine Datenstrukturen zu speichern. Die Sprachunterstützung für IDs bedeutet, dass komplexe Diagramme erstellt werden können, obwohl dies am besten für Bäume verwendet wird. Ein Dokument kann anhand einer Spezifikation auf Richtigkeit geprüft werden. Es gibt verschiedene Probleme mit diesem Format, die es unpraktisch machen können, wie zum Beispiel die extreme Ausführlichkeit.

JSON

Ist in erster Linie eine Art und Weise einfaches Objekt zu speichern Bäume . Es gibt keine Unterstützung für allgemeine Grafiken. JSON hat kein Konzept von Typ über Primitiven Zeichenfolge , integer , float , boolean , null und die Auflistungstypen Array und Objekt .

YAML

Am einfachsten als Erweiterung von JSON zu verstehen. Verfügt über Aliase , mit denen Objektgraphen beliebiger Komplexität erstellt werden können. Verfügt über ein Konzept von Metadaten wie Tags , die für die ordnungsgemäße Typisierung verwendet werden können.

CSV

Hat nichts außer einem einzigen Tisch. Wenn wir Objektdiagramme speichern möchten, müssten wir ein Schema wie das folgende verwenden

#ID,Type,Field1,Field2,...,FieldN

1,String,foo
2,String,bar
3,Array<String>,1,2

Es gibt viele CSV-Dialekte, bei denen Trennzeichen, Zeilenendezeichen, Anführungszeichen, Escapezeichen und viele andere Probleme nicht zutreffen, weshalb sie für allgemeine (binäre) Daten ungeeignet sind. All dies erschwert die Verarbeitung von CSV-Daten.

Grundsätzlich sind einfache Dinge mit CSV schwierig oder unmöglich, wenn es als allgemeines Serialisierungsformat verwendet wird.

Diese Kritik trifft nicht zu, wenn damit wirklich tabellarische Daten wie Arbeitszeitnachweise oder Messreihen gespeichert werden. Hier ist CSV (häufig in der Variante mit durch Tabulatoren getrennten Werten) in der Regel kompakter und benutzerfreundlicher als die anderen Datenformate.

amon
quelle
1
Ich halte das für ein faires Argument. Sie sind unterschiedlich, verwenden Sie sie also für verschiedene Zwecke, verwenden Sie sie jeweils dort, wo es am besten ist.
Ben
1
Ohne die erste Zeile wäre dies eine gute Antwort. CSV ist eine gute Alternative zu XML für tabellarische Informationen (eine verteilbare SQLite-Datei ist wahrscheinlich besser als beide). Aber wie Sie für tabellarische Daten erklären, ist es die überlegene Dateiauswahl.
4

Ich muss auch sagen, dass es davon abhängt, was Sie erreichen wollen. Bei vielen Problemen spielt es keine Rolle, für was Sie sich entscheiden, wenn das Problem klein genug ist und Ihre Auswahl gut zum vorhandenen System passt.

Es kann manchmal ein Problem sein, ein Altsystem zu nehmen und zu versuchen, das Problem in einem neuen Format zu beheben, da Sie mehr Komplexität eingeführt haben und ein neues Eingabesystem zum Debuggen haben. Ich habe dies oft gesehen, wenn neue Leute etwas anderes bevorzugen als das, was existiert, oder wenn ein neues Format erscheint und sie damit experimentieren wollen. Dies kann eine gute Idee sein oder auch nicht, es hängt von den Umständen ab.

Vor Jahren arbeitete ich an einem Datenbanksystem für Forschungsgraphen, das von CSV-Dateien verschiedener Formate abhing. Der Importeur von CSV-Dateien erstellte Diagramme für uns und es wurde jahrelang daran gearbeitet, den Code zu debuggen und zu optimieren. Es war sowohl schnell als auch flexibel und wir würden es gerne nutzen, um große Forschungsprojekte zu starten. Als XML in der Szene auftauchte, haben wir einen XML-Importer hinzugefügt, der jedoch nicht unbedingt die Geschwindigkeit verbessert oder die Komplexität zum Ausdruck bringt, und XML war sicherlich nicht besser darin, Diagrammstrukturen auszudrücken als CSV. JSON ist viel netter (und terser) als XML, aber in vielerlei Hinsicht ähnlich. Daher würde ich beim Erstellen eines neuen Importers auf diesem System ein ähnliches Ergebnis erwarten.

Zu einem bestimmten Zeitpunkt hatte ein Kunde eine riesige Datenmenge im (wie wir es nannten) "Cobol" -Format, Dateien mit Zeilen variabler Länge, die Markierungen enthielten, die angaben, wie die darauf folgenden Bytes zu interpretieren waren. Es stammte aus einer Zeit, in der die Lagerung teuer war, weshalb Kompaktheit gefragt war. Wir haben diese Daten importiert, indem wir sie sofort in das CSV-Format konvertiert und in den CSV-Importer eingespeist haben. Das war einfach und minimierte den Aufwand für das Debugging und die Wartung, die gute Dinge sind. Wenn wir diese Art von Daten die ganze Zeit importieren müssten, hätten wir sie möglicherweise direkt in das System eingebaut, um Leistungs- und Effizienzgewinne zu erzielen.

Es kommt also darauf an, was Sie tun und was das zugrunde liegende System tut. In meinem Beispiel war der CSV-Importeur solide konstruiert und zuverlässig. Ich würde zögern, Ihnen mitzuteilen, dass ein Format besser oder schlechter war, ohne zu verstehen, was in den anderen Ebenen, die ich aufbaue, vor sich geht. Ich liebe JSON und bevorzuge es, aber ich weiß, dass CSV-Dateien bei bestimmten komplexen Datenstrukturen und ausreichend großen Datenmengen auch sehr gut funktionieren können.

Fran K.
quelle
3

Nein.

CSV ist nicht wirklich ein einzelnes Format. Es gibt eine Vielzahl von Stilen für Escapezeichen, Trennzeichen und andere Formatierungsprobleme, die in vielen CSV-Dateien auftreten.

Wenn Sie dies als Flat-File-Speicher verwenden, ist JSON für Sie viel besser geeignet. JSON ordnet Objekte mit wesentlich weniger Aufwand zu und von Objekten zu, als Sie mit CSV tun müssen.

Whatsisname
quelle
0

Ich würde dringend davon abraten. Ich bin möglicherweise in der Lage, irgendwann CSV auszugeben (wenn der Benutzer dies wünscht). Es ist jedoch für Speicher- / Importzwecke ungeeignet. Dies ist hauptsächlich auf die Tatsache zurückzuführen, dass "CSV" sehr schlecht definiert ist. Zeigt das "C" "Komma" oder "Zeichen" getrennt an? Wie behandelt man Textstrings, die Escape-Zeichen enthalten, wie "? Jede verdammte CSV-Implementierung behandelt Escape-Zeichen usw. unterschiedlich, was zu Dateien führt, die ex-, aber nicht importiert werden können usw.

Excel ist eine gute Demonstration: In der englischen Version wird "," als Trennzeichen verwendet. In Deutschland wird ";" verwendet. Also erstickt eine deutsche Version an englischen CSV-Dateien und umgekehrt ...

Die Hauptstärke liegt in der Lesbarkeit, die nicht unterschätzt werden sollte. Aber ich würde mich nicht darauf als Speicherformat verlassen, es ist zu spröde für diesen Zweck. Wenn Sie Dateien für Menschen exportieren müssen, könnten Sie CSV verwenden, aber selbst dann würde ich versuchen, eine Bibliothek zu verwenden, die in XLSX-Dateien schreibt (sie sind frei verfügbar).

Christian Sauer
quelle
3
Es ist "Komma", siehe RFC 4180 . Nur weil Microsoft in Deutschland etwas kaputt gemacht hat, heißt das nicht, dass ein standardisiertes Format unbrauchbar ist ...
Ben
Nein, es ist kein "Komma" - es kann auch "zeichengetrennt" bedeuten und das Problem ist nicht auf Deutschland beschränkt. Ja, der RFC legt etwas anderes fest, aber eine Datei mit dem Namen "csv" kann eine Menge verschiedener Trennzeichen, Escape-Stile usw. enthalten. Wenn Sie versuchen, eine solche Datei zu importieren, importiert Ihr Programm ... etwas, aber nicht das, was Sie wollen.
Christian Sauer
Diese Antwort identifiziert wichtige Fallstricke gegen CSV.
GDBJ
-3

Im Allgemeinen NO. Warum? JSON und XML sind im Grunde dazu da, die gefürchtete CSV loszuwerden. Sie sind die strukturierten Ansätze dessen, was mit CSV seit langem unstrukturiert gemacht wird. Ja, es gibt einige Anwendungsfälle, in denen CSV immer noch bevorzugt wird, aber im Allgemeinen ist es in 9 von 10 Fällen besser, CSV nicht zu verwenden.

Pieter B
quelle
7
Es sei denn, die Daten, die Sie übertragen, sind "flach". Sie sparen dann viel Geld, indem Sie keine nutzlosen XML-Tags usw. übertragen.
Ben