Вывод объектов из json в файл csv

Я пытаюсь найти способ вывести объекты json и сохранить их в файле csv, я пытался использовать цикл 'for in' in 'loop for', но проблема в том, что свойство и длина объекта разные

data json:

[ 
{"name":"Googlebot","htmlimports":true,"objectfit":true,"geolocation":true,"histor":true,"es5object":true,"strictmode":true,"es5string":true}, 

{"name":"Bing","htmlimports":false,"geolocation":true,"history":true,"es5object":true,"strictmode":true,"es5string":true}, 

{"name":"iE","htmlimports":true,"svgclippaths":true,"geolocation":true,"history":true,"ie8compat":false,"strictmode":true,"es5string":true,"es5syntax":true} ]


const stringify = require('csv-stringify');
const fs = require('fs')

fs.readFile('./googleBot.json','utf8', (err, dataa) => {
  if (err) throw err;
  const dates  = JSON.parse(dataa)

  let data = [];
  let columns = {
    value: 'value',
    Googlebot: 'Googlebot',
    Bing: 'Bing',
    iE: 'iE',
  };

  for(i = 0; i < dates.length; i++){
    for (var prop in dates) {
      data.push([prop, `${dates[0][prop]}`, `${dates[1][prop]}`, `${dates[2][prop]}`]);
    }
  }


  stringify(data, { header: true, columns: columns }, (err, output) => {
    if (err) throw err;
    fs.writeFile('my.csv', output, (err) => {
      if (err) throw err;
      console.info('my.csv saved.');
    });
  });
});

ожидаемый результат:

Вывод объектов из json в файл csv

ожидаемый результат, похоже, не имеет большого отношения к входному JSON ... в любом из ваших объектов нет свойств «автозаполнение», «несколько», «минимум» или «максимум». И неясно, как это представляет собой «сравнение» двух объектов ... кажется, вы просто хотите проработать каждый из них и вывести значения некоторых свойств.

ADyson 09.11.2018 11:30

Ваш вопрос непонятен? Ваш образец данных и изображение результата не совпадают

Milad Aghamohammadi 09.11.2018 11:44

Я имею в виду ожидаемый результат - это просто пример

tobi1512 09.11.2018 11:47

да, это больше похоже на просмотр каждого значения и вывод, чем на сравнение вас правильно

tobi1512 09.11.2018 12:21

«Ожидаемый результат - это просто пример» хорошо, но нам было бы намного легче понять, если бы это был пример, основанный на том, что вы ожидаете от вводимых данных, которые вы показали. В противном случае мы не можем точно знать, каковы правила. Сейчас это выглядит случайным.

ADyson 09.11.2018 13:23

хорошо, я понимаю, я исправил результат

tobi1512 09.11.2018 13:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
231
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку ваши объекты могут содержать разные свойства, вам сначала нужно собрать список всех возможных свойств.

Вы можете сделать это, создав временный массив для хранения свойств и перебирая ваши объекты и вставляя свойства в этот массив, если их там еще нет.

var allProps = [];

for (var i = 0; i < dates.length; i++) {
  for (var prop in dates[i]) {
    if (!allProps.includes(prop)) {
      allProps.push(prop);
    }
  }
}

После этого остается только правильно построить ваши строки:

for (var i = 0; i < allProps.length; i++) {
  var prop = allProps[i];
  if (prop == 'name') continue;  //skip the name property, it's alrady in the columns

  var row = []
  row.push(prop);  //first entry in the row is the property name

  for (var k = 0; k < dates.length; k++) {
    row.push(`${dates[k][prop]}`);
  }

  data.push(row);
}

Смотрите этот код, запускающий здесь

Выход:

value,Googlebot,Bing,iE
htmlimports,true,false,true
objectfit,true,undefined,undefined
geolocation,true,true,true
histor,true,undefined,undefined
es5object,true,true,undefined
strictmode,true,true,true
es5string,true,true,true
history,undefined,true,true
svgclippaths,undefined,undefined,true
ie8compat,undefined,undefined,false
es5syntax,undefined,undefined,true

Другие вопросы по теме