2016-09-23 6 views
0

Ich schreibe eine Funktion, die die Ergebnisse eines Web-Scrape aufnimmt, das ich auf einer Tshirt-Website durchgeführt habe.Warum wird meine CSV-Datei nicht ohne Daten geschrieben?

Jedes T-Shirt, wurde als ein Objekt gespeichert, mit einem Titel, Preis, ImgUrl, URL und Zeit. Jedes dieser Objekte ist in einem Array gespeichert und enthält alle T-Shirts.

In dieser Funktion konvertiere ich zuerst das Array in eine JSON-Zeichenfolge. Ich trage das Protokoll ein, nur um zu überprüfen, ob dies korrekt ausgeführt wird.

Ich dann den Ordner erstellen, wenn es nicht bereits Daten genannt existiert.

Ich listet die gewünschten Felder für die CSV.

Ich schreibe dann die Datei, indem ich meine Daten (JSON-String), den Dateipfad, übergebe und ihn zum Überschreiben einstelle.

Jetzt, wenn ich die Funktion aufrufen, tut es alles, außer, wenn ich die CSV-Datei öffne, werden die Spalten korrekt betitelt, aber die Tabelle ist komplett leer.

Irgendwelche Ideen? Ich würde Ihre Eingabe sehr schätzen, danke!

-Code ist unten:

var json2csv = require('json2csv'); 
var fs = require('fs'); 

function convertJson2Csv(){ 

//The scraper should generate a folder called `data` if it doesn’t exist. 
var dir ='./data'; 

if(!fs.existsSync(dir)){ 
    fs.mkdirSync(dir); 
}; 

var tshirtArray = [ { 
    Title: 'Mike the Frog Shirt, Orange', 
    Price: '$25', 
    ImageURL: 'img/shirts/shirt-108.jpg', 
    URL: 'http://shirts4mike.com/shirt.php?id=105', 
    Date: 'September 23rd 2016, 12:28:49 am' 
},{ 
    Title: 'Logo Shirt, Teal', 
    Price: '$20', 
    ImageURL: 'img/shirts/shirt-107.jpg', 
    URL: 'http://shirts4mike.com/shirt.php?id=105', 
    Date: 'September 23rd 2016, 12:28:49 am' 
},{ 
    Title: 'Logo Shirt, Gray', 
    Price: '$20', 
    ImageURL: 'img/shirts/shirt-106.jpg', 
    URL: 'http://shirts4mike.com/shirt.php?id=105', 
    Date: 'September 23rd 2016, 12:28:49 am' 
},{ 
    Title: 'Mike the Frog Shirt, Yellow', 
    Price: '$25', 
    ImageURL: 'img/shirts/shirt-105.jpg', 
    URL: 'http://shirts4mike.com/shirt.php?id=105', 
    Date: 'September 23rd 2016, 12:28:50 am' 
}]; 

var tshirtJson = JSON.stringify(tshirtArray); 

var fields = ['Title', 'Price', 'ImageURL', 'URL', 'Date']; 

var csv = json2csv({ data: tshirtJson, fields: fields }); 

console.log(csv); 

fs.writeFile('./data/file.csv', csv, {overwrite: true}, function(err) { 
    if (err) throw err; 
    console.log('file saved'); 
}); 
}; 

convertJson2Csv(); 

Antwort

1

Ihr Datenobjekt Kleintasten. Ihr fields Array hat nicht.

var fields = ['Title', 'Price', 'ImageURl', 'URL', 'Date']; 

JavaScript unterscheidet zwischen Groß- und Kleinschreibung. Die Feldnamen müssen mit den Objektschlüsseln übereinstimmen.

+0

Hey ich den Code in der Frage aktualisiert, immer noch nicht funktioniert aus irgendeinem Grund? – bloppit

1

Wahrscheinlich kann es die Felder mit den Objekteigenschaften nicht übereinstimmen. Ich sehe auf der TshirtArray Objekte haben Sie eine 'img' Eigenschaft und in den Feldern ist 'imageURl'.

versuchen, das Objekt zu ändern:

var tshirtArray = [ { 'Price': '$20', 
'ImageURl': 'img/shirts/shirt-107.jpg', 
'Title': 'Logo Shirt, Teal', 
'URL': 'http://shirts4mike.com/shirt.php?id=105', 
'Date': 'September 22nd 2016, 11:17:48 pm' }, 
... 
]; 

Sie können auch die Titel recht machen mit den Feldnamen vorbei:

https://github.com/zemirco/json2csv#example-4

+0

Hey, ich habe den Code in der Frage aktualisiert, funktioniert aus irgendeinem Grund immer noch nicht? – bloppit

+0

@bloppit versuchen, die json.stringify zu entfernen und das Json-Objekt tshirtArray direkt an die json2csv-Funktion übergeben. – dlac

+0

Dang, hast du recht. Obwohl das keinen Sinn ergibt. Ich habe versucht, die TshirtArray mit den Eigenschaften wie diese "Title" und wie diese Titel. Habe ich Recht damit, dass dies seltsam ist, da JSON erfordert, dass Eigenschaftsschlüssel Anführungszeichen haben? – bloppit

Verwandte Themen