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?
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.