Экспорт строки в CSV с сохранением запятых

#javascript #string #csv

Вопрос:

Мне нужно экспортировать строку в csv.

Пример строки:

 [{"name":"ALIASED_LINE_WIDTH_RANGE","value":{"0":1,"1":1}}]
 

Я хочу, чтобы запятые внутри строки были запятыми, а не разделителями.

Поэтому я хочу сохранить эту строку как 1 элемент. Я попытался завернуть это в кавычки»», но это не работает. Мне нужен тот же вывод, поэтому мне нужна строка:

 [{"name":"ALIASED_LINE_WIDTH_RANGE","value":{"0":1,"1":1}}]
 

Но я хочу, чтобы запятые не рассматривались как разделители.

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

1. Заменить «значение»:{«0″:1,»1»:1} с «значением»:'»0″:1,»1″:1′

2. @Grumpy — не уверен, как это поможет операции. Кроме того, это нарушает объект JSON (вы удалили допустимый синтаксис), что приводит к чему-то, что не может быть правильно проанализировано.

Ответ №1:

Как строка должна быть отформатирована в результирующем CSV-файле.

  1. Все двойные кавычки ( " ) в вашей текущей строке должны быть заменены двумя двойными кавычками ( "" )
  2. Затем вся строка должна быть заключена в двойные кавычки ( "... «).

Учитывая ваш пример строки:

 [{"name":"ALIASED_LINE_WIDTH_RANGE","value":{"0":1,"1":1}}]
 

Вот как он должен быть отформатирован в результирующем CSV-файле:

 "[{""name"":""ALIASED_LINE_WIDTH_RANGE"",""value"":{""0"":1,""1"":1}}]"
^   ^     ^  ^                         ^  ^      ^   ^  ^    ^  ^     ^
 

Примечание.В приведенном выше примере необходимые дополнительные двойные кавычки ( " ) обозначены символами каретки ( ^ ).
(Символы каретки существуют только в иллюстративных целях)


Объявление строки в JS.

Рассмотрим следующие два примера при объявлении строки CSV в JavaScript:

Пример A: Если ваш стиль кодирования JavaScript обычно использует одинарные кавычки ( ' ), просто заключите предыдущую строку в формате CSV в одинарные кавычки ( '...' ).

Например:

 const str = '"[{""name"":""ALIASED_LINE_WIDTH_RANGE"",""value"":{""0"":1,""1"":1}}]"';
//          ^                                                                       ^
console.log(str); 

Пример B: Однако, если ваш стиль кодирования JavaScript обычно использует двойные кавычки ( " ), то:

  1. Заключите строку в формате CSV в двойные кавычки ( "..." )
  2. Кроме того, уберите все внутренние двойные кавычки с помощью обратной косой черты ( ).

Например:

 const str = ""[{""name"":""ALIASED_LINE_WIDTH_RANGE"",""value"":{""0"":1,""1"":1}}]"";
//          ^^   ^ ^     ^ ^  ^ ^                         ^ ^  ^ ^      ^ ^   ^ ^  ^ ^    ^ ^  ^ ^      ^ ^
console.log(str); 

Примечание: Как вы можете видеть, пример A лаконичен по сравнению с примером B, однако при запуске любого из двух предыдущих фрагментов кода строка, записанная в консоль, по сути, одинакова. Они оба создают нужную строку в формате CSV.


Дополнительное примечание.

Если строка, которую вы указали в своем вопросе, получена с помощью JSON.stringify() метода преобразования массива объектов JavaScript в строку JSON. Тогда вы, возможно, захотите рассмотреть следующее:

 const input = [{
  name: 'ALIASED_LINE_WIDTH_RANGE',
  value: {
    0: 1,
    1: 1
  }
}];

const str = `"${JSON.stringify(input).replace(/"/g, '""')}"`;

console.log(str) 

Как вы можете видеть, если вы запустите предыдущий фрагмент кода, он также зарегистрирует в консоли нужную строку в формате CSV. Он делает это, используя:

  • JSON.stringify() Метод преобразования input значения в строку JSON.
  • Впоследствии метод строки replace() заменяет все двойные кавычки ( " ) двумя двойными кавычками ( "" ).
  • Чтобы заключить всю результирующую строку в двойные кавычки ( "..." ), мы используем литерал шаблона.