0

I'm a total JS noob. I have read a JSON and filtered out specific items from it and saved it to a variable named mapped. How do I export this JSON to a properly formatted CSV file?

let json = require('./users.json')
let filtered = json.Users.filter((a)=>{
    return new Date(a.UserCreateDate) > new Date('2020-05-11T00:00:00.000000+05:30')
})
let mapped=filtered.map((a)=>{
    let email
    a.Attributes.forEach(element => {
        if(element.Name=='email'){
            email = element.Value
        }
    });
    return {
        name: a.Username,
        email: email,
        UserCreateDate: a.UserCreateDate,
        UserStatus: a.UserStatus
    }
})
console.log(JSON.stringify(mapped, null, 4), mapped.length)

Although there are quite a few answers to this topic, I haven't been able to successfully implement any of those.

5
  • It's not clear what kind of result you want. If it turns to CSV file, you want the keys to be the header or just list keys and values together in a line? Commented May 16, 2020 at 8:45
  • 1
    Does this answer your question? How can I convert JSON to CSV? Commented May 16, 2020 at 8:46
  • Does this answer your question? How to convert JSON to CSV format and store in a variable Commented May 16, 2020 at 8:46
  • 1
    @Momin, your reference is for python ... Commented May 16, 2020 at 9:29
  • @pritam I did try the samples in the code you mentioned but I believe its use case was a tad different. Commented May 16, 2020 at 9:31

1 Answer 1

1

I assume you wanna use the keys as the header in CSV file. What you need is to open a write stream, the format of the CSV file is pure strings with commas separating the values.

// ...
let mapped=filtered.map((a)=>{
  //...
})

// ...

const fs = require('fs');
let writeStream = fs.createWriteStream('./output.csv');
writeStream.on('open', () => {
  // get the header
  const header = Object.keys(mapped[0]).toString().concat('\n');

  writeStream.write(header);

  mapped.forEach((obj) => {
    const values = Object.values(obj).toString().concat('\n');
    writeStream.write(values);
  });
  writeStream.end();
});

Sign up to request clarification or add additional context in comments.

8 Comments

i get ReferenceError: object1 is not defined
oh, that is typo
Also, if I use map func instad of filter I get another error at line ` a.Attributes.forEach(element => {`
What kind of problem?
TypeError: Cannot read property 'forEach' of undefined.. I do get a CSV with your suggested code. Thanks! but there needs to be a delimiter after one row of data cuz I'm getting everything in the same row.How do I do that?
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.