JAVASCRIPT Конвертировать JSON Obj в CSV txt файл?

#javascript #json #csv

#javascript #json #csv

Вопрос:

У меня есть форма с кнопкой отправки.

Прямо сейчас у меня есть немного кода, который при нажатии кнопки преобразует все входные данные формы в объект и загружает файл .json, который выглядит следующим образом:-

 {"productNumber":"12345678","cat1":"sports","val1":"yes","val2":"yes","val3":"no","val4":"no","val5":"no"}
 

Код, который я использую для создания этого, взят из предыдущего потока SO здесь: —

 <script>
(function() {
    function toJSONString( form ) {
        var obj = {};
        var elements = form.querySelectorAll( "input, select" );
        for( var i = 0; i < elements.length;   i ) {
            var element = elements[i];
            var name = element.name;
            var value = element.value;

            if( name ) {
                obj[ name ] = value;
            }
        }

        return JSON.stringify( obj );
    }

    document.addEventListener( "DOMContentLoaded", function() {
        var form = document.getElementById( "generatePayload" );
        var output = document.getElementById( "output" );
        form.addEventListener( "submit", function( e ) {
            e.preventDefault();
            var json = toJSONString( this );
            output.innerHTML = json;

            console.log(json)

            var data = "text/json;charset=utf-8,"   json;
            var a = document.createElement('a');
            var accountNumber = document.getElementById( "productNumber" ).value
            a.href = 'data:'   data;
            a.download = accountNumber   '.json';
            a.innerHTML = 'download FILE';

            var container = document.querySelector( "#exportPayload" );
            container.appendChild(a);
            a.click();

            a.remove();

            console.log("Payload Export Successful!")

        }, false);

    });

})();
</script>
 

Что я пытаюсь сделать, так это изменить код, чтобы моя кнопка вывода создавала файл .csv или .txt, который выглядит следующим образом: —

 12345678,sports,yes,yes,no,no,no
 

Есть ли функция, которую я могу использовать в Javascript, чтобы выполнить это преобразование перед загрузкой файла? Я пытаюсь перепроектировать это в качестве учебного упражнения, поэтому любая информация, которую вы можете предоставить по фрагментам кода, очень помогла бы мне с этим вопросом!

Ответ №1:

Вы можете получить CSV, заключив значения в кавычки. Если в значениях есть кавычки, нам нужно их экранировать

 const obj = {"productNumber":"12345678","cat1":"sports","val1":"yes","val2":"yes","val3":"no","val4":"no","val5":"no"}
const csv = `"${Object.values(obj).join('","')}"`
console.log(csv); 

Если вам не нужны кавычки, сделайте это

 const obj = {"productNumber":"12345678","cat1":"sports","val1":"yes","val2":"yes","val3":"no","val4":"no","val5":"no"}
const csv = Object.values(obj).join(",")
console.log(csv); 

Комментарии:

1. Привет, мплунгджан! Я не уверен, что я все правильно реализовал. Я вставил ваш второй фрагмент в свой код. Где я могу это реализовать? Я попытался реализовать это перед преобразованием в строку json, но как мне загрузить csv obj в конце?