Как преобразовать массив CSV в JSON с помощью инструмента командной строки Miller?

Используя инструмент командной строки Miller , я хочу преобразовать файл CSV с заголовками в массив JSON.

В настоящее время я использую эту команду: mlr --icsv --ojson cat sample.csv > sample.json

Он выводит JSON, но не в формате массива.

Это пример ввода CSV:

      Keyword, Weight, Quantity
Apple, 10, 2345
Orange, 23, 467
Banana, 2345, 2345

И это вывод, который я получаю от Миллера:

      { "Keyword": "Apple", "Weight": 10, "Quantity": 2345 }
{ "Keyword": "Orange", "Weight": 23, "Quantity": 467 }
{ "Keyword": "Banana", "Weight": 2345, "Quantity": 2345 }

Как видите, этот вывод представляет собой строки JSON, а не формат массива.

Я хочу, чтобы JSON был массивом, например:

      [
    { "Keyword": "Apple", "Weight": 10, "Quantity": 2345 },
    { "Keyword": "Orange", "Weight": 23, "Quantity": 467 },
    { "Keyword": "Banana", "Weight": 2345, "Quantity": 2345 }
]

Какова правильная команда Миллера для этого?

1 ответ

Догадаться.

Вам нужно использовать --jlistwrap.

Таким образом, полная команда становится: mlr --icsv --ojson --jlistwrap cat sample.csv > sample.json

Что выводит это:

      [
{ "Keyword": "Apple", "Weight": 10, "Quantity": 2345 }
,{ "Keyword": "Orange", "Weight": 23, "Quantity": 467 }
,{ "Keyword": "Banana", "Weight": 2345, "Quantity": 2345 }
]

Он не отформатирован красиво (запятые в неправильной строке и без отступа), но это правильный массив JSON.

После запуска инструмента для автоматического форматирования JSON это будет выглядеть так:

      [
   {
      "Keyword":"Apple",
      "Weight":10,
      "Quantity":2345
   },
   {
      "Keyword":"Orange",
      "Weight":23,
      "Quantity":467
   },
   {
      "Keyword":"Banana",
      "Weight":2345,
      "Quantity":2345
   }
]
Другие вопросы по тегам