У меня есть вызов API, который переходит в JSON и выводит через fast-csv. Однако он выводит все в одну строку в файле CSV. Есть ли способ писать в несколько строк?

axios.get(url+'term='+orgName +'&location='+city + state + zipCode,{
            headers: {
                Authorization: 'Bearer ' + token
            }
        })
        /*If results are less than 1, moves on to fetchWhitePages API, ELSE, passes in the data*/
            .then(res => {
                if(Array.isArray(res.data.businesses) && res.data.businesses.length <= 0){
                   return fetchWhitePages(data);
                }else{
                    console.log('RUNNING YELPAPI');
                    /*For loop to get JSON objects within YelpAPI */

                    for(let i =0; i < res.data.businesses.length; i++ ){

                        churchName.push(res.data.businesses[i].name + '\n\r');
                        churchAddress.push(res.data.businesses[i].location.display_address + '\n\r');
                        churchPhone.push(res.data.businesses[i].phone + '\n\r' );

                        writeStream()




const churchName = [];
const churchAddress = [];
const churchPhone = [];

function writeStream (){
    fast
        .writeToPath("my.csv", [
                {name: churchName, address: churchAddress, phone: churchPhone}
        ], {
            headers: true,
            transform: function(row){
                return {
                    Name: row.name,
                    Address: row.address,
                    Phone: row.phone
                };
            }
        })
        .on("finish", function(){
            console.log("done!");
        });
}
0
Chris 12 Мар 2019 в 14:50

1 ответ

Лучший ответ

В вашем коде необходимо исправить две вещи:

  1. Вызывайте writeToPath только один раз после цикла for.
  2. Постройте массив церковных объектов, каждый из которых представляет ровно одну церковь.

А вот как это могло бы выглядеть:

axios.get(url + 'term=' + orgName + '&location=' + city + state + zipCode, {
        headers: {
            Authorization: 'Bearer ' + token
        }
    })
    /*If results are less than 1, moves on to fetchWhitePages API, ELSE, passes in the data*/
    .then(res => {
        if (Array.isArray(res.data.businesses) && res.data.businesses.length <= 0) {
           return fetchWhitePages(data);
        } else {
            console.log('RUNNING YELPAPI');
            /*For loop to get JSON objects within YelpAPI */

            const churches = [];
            for(let i =0; i < res.data.businesses.length; i++ ){

                churches.push({
                    name: res.data.businesses[i].name + '\n\r';                 
                    address: res.data.businesses[i].location.display_address + '\n\r';
                    phone: res.data.businesses[i].phone + '\n\r';
                });

            }

            writeFile(churches);
       }
  });


function writeStream (churches) {
    fast.writeToPath("my.csv", churches, {
        headers: true,
        transform: function(row){
            // you could eliminate this block by changing the property names in the church objects
            return {
                Name: row.name,
                Address: row.address,
                Phone: row.phone
            };
        }
    })
    .on("finish", function(){
        console.log("done!");
    });
}

Если это решит вашу проблему, не забудьте отметить это как ответ.

1
Christoph 12 Мар 2019 в 12:19