2016-09-26 4 views
0

Ich versuche, ein JSON-Objekt in eine CSV-Datei in Javascript zu konvertieren.Mehrschichtiges JSON-Objekt in CSV-Konvertierung

Ich habe alle Arten von Bibliotheken und vorgefertigten Funktionen verwendet, aber nichts scheint für mich zu arbeiten, sobald der JSON beginnt zu nisten.

Dies ist eine der Funktionen, die ich benutze:

function ConvertToCSV(objArray) { 
     var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray; 
     var str = ''; 

     for (var i = 0; i < array.length; i++) { 
      var line = ''; 
      for (var index in array[i]) { 
       if (line != '') line += ',' 

       line += array[i][index]; 
      } 

      str += line + '\r\n'; 
     } 

     return str; 
    } 

ich Leute haben gesehen, sagen, dass die Komplexität des JSON-Objekt nicht von Einfluss auf die Ausgabe sein sollte, aber alles, was ich bekommen habe ist: [Objekt Objekt], [Objekt Objekt], [Objekt Objekt], etc.

Online können Sie JSON zu CSV-Konverter finden, die tatsächlich schaffen, eine nett erstellte CSV-Datei mit zusätzlichen Headern zu erstellen, wenn eine Eigenschaft doppelt verschachtelt ist. Also alle Hinweise in die richtige Richtung, wie ich eine Funktion wie diese schreiben würde, wären sehr willkommen. Wenn Sie Bibliotheken kennen, die das können, wäre das auch toll!

(Es ist wahrscheinlich erwähnenswert, dass wenn ich ein Single-Layer-Json-Objekt die CSV-Datei wird nicht [Objekt, Objekt] und gibt mir stattdessen eine nette CSV-Datei, es ist nur wenn es beginnt, das geschachtelt wird es funktioniert nicht mehr)

UPDATE: Wie gewünscht, ist dies die Art der JSON-Datei, mit der ich arbeite.

[ 
{ 
"HEADER": { 
    "SEARCH": "Zoeken", 
    "FILTER": "Filter", 
    "MISC": "Overige" 
}, 
    "FORM": { 
    "REQUIRED": "Dit veld is verplicht", 
    "MINLENGTH": "De input is te kort", 
    "MAXLENGTH": "De input is te lang", 
    "EMAIL": "Geen geldig e-mailadres" 
}, 
"TODO": "TODO: Hier moet nog een leuke tekst komen! dit komt uit een vertaling, in dit geval Nederlands. Nu is Nederlands natuurlijk op dit moment de enige taal maar het zou mooi zijn als hier in de toekomst veer vertalingen bij komen..." 
} 
] 

wollte ich auch hinzufügen, dass, wenn ich mich als Ausgabe nicht bekommen ‚agnes.js‘ verwende [Object-Objekt], sondern jeder einzelner Buchstabe wird untereinander und es gibt nicht mehr als 1 hinzugefügt Säule.

+0

fügen Sie bitte ein Beispiel für Ihr Objekt hinzu. –

+0

Ich habe versucht, Ihren Beispielcode .. Ich bekomme nicht '[Objekt Objekt]' –

+0

@NinaScholz hinzugefügt Beispiel meines JSON –

Antwort

0

triviale Lösung

function ConvertToCSV(objArray) { 
    var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray; 
    var str = ''; 

    for (var i = 0; i < array.length; i++) { 
     var line = ''; 
     for (var index in array[i]) { 
      if (line != '') line += ','; 

      // If array[i][index] is an object then we loop over its properties 
      // And add it to the CSV string in a similar manner 
      if (typeof array[i][index] === 'object') { 
       var inner_obj = array[i][index]; 

       for (var index1 in inner_obj) { 
        if (line != '') line += ',' 

        line += '"' + inner_obj[index1] + '"'; 
       } 
      } else { 
       line += '"' + array[i][index] + '"'; 
      } 
     } 

     str += line + '\r\n'; 
    } 
    return str; 
} 

ERKLÄRUNG

Da der Objektstruktur wird konsistent bleiben, was ich eine if-else Check lief wurde, um zu sehen, ob die array[i][index] ein Objekt ist oder nicht. Wenn es sich um ein Objekt handelt, führen wir einfach eine Schleife über seine Eigenschaften aus und fügen sie wie zuvor in die CSV-Zeichenfolge ein.

Auch habe ich Anführungszeichen um alle Elemente gelegt, so dass Zeichenfolgen, die , haben, nicht als Elementtrennzeichen des CSV fehlinterpretiert werden.

+0

Yay! zumindest bekomme ich jetzt Werte in die CSV-Datei .. Es gibt nur noch ein Problem. Alle Titel sind weg, nur noch eine Zeile mit allen einzelnen Titeln. Würdest du wissen, wie du das hinzufügst? Oder fügt meine Funktion diese nicht an erster Stelle hinzu? Ich fange an zu denken, ich sollte nur die Verschachtelung entfernen und es einfacher halten. –

+0

Mit Titeln meinen Sie die Header? Nein, Ihre Funktion behandelt die Header nicht. –

+0

@MaxTaylor Sie sollten diese Antwort upvote/akzeptieren, wenn es Ihnen geholfen hat. –

Verwandte Themen