Как избежать создания массива «ConvertFrom-Csv | ConvertTo-Json» (квадратные скобки)

#powershell

Вопрос:

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

 $TestFile = 'E:TestFile.prn'  if(Test-Path $TestFile) {  (Get-Content $TestFile| ConvertFrom-Csv) | ConvertTo-Json -compress | Out-File "E:TestFile.json" }  

Это делает все, что я ожидал бы от него, за исключением того, что он добавляет квадратные скобки вокруг результирующего вывода. Я хочу получить точно такой же результат, но без квадратных скобок. Есть ли способ сделать это во время приведенного выше преобразования или есть способ добавить дополнительную командную строку, которая удаляет скобки?

Заранее большое спасибо!

С уважением

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

1. Пример содержимого вашего csv-файла?

2. Он добавляет квадратные скобки, потому что описывает коллекцию. Содержит ли CSV-файл только 1 строку или…?

3. Пример содержимого будет следующим: «TESTCOLUMN1″,»TESTCOLUMN2″,»TESTCOLUMN3″,»TESTCOLUMN4», «TestValue_1A»,»TestValue_2A»,»TestValue_3A»,»TestValue_4A», «TestValue_1B»,»TestValue_2B»,»TestValue_3B»,»TestValue_4B» Действительно, как только он содержит более одной строки, он добавляет квадратные скобки. Результирующий вывод выглядит следующим образом, если он содержит более одной строки: [{«TESTCOLUMN1″:»TestValue_1A»,»TESTCOLUMN2″:»TestValue_2A»,»TESTCOLUMN3″:»TestValue_3A»,»TESTCOLUMN4″:»TestValue_4A»},{«TESTCOLUMN1″:»TestValue_1B»,»TESTCOLUMN2″:»TestValue_2B»,»TESTCOLUMN3″:»TestValue_3B»,»TESTCOLUMN4″:»TestValue_4B»}]

Ответ №1:

Строго говоря, квадратные скобки-это правильный JSON. Он возвращает массив, потому что это массив.

Однако вы можете просто удалить первый и последний символы строки:

 Import-Csv -Path $TestFile |  ConvertTo-Json -Compress |  ForEach-Object { $_.Substring(1, $_.Length - 2) } |  Out-File "E:TestFile.json"  

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

1. Большое спасибо, это делает свое дело! Очень новичок в powershell, поэтому я ценю вашу помощь. Итак, просто для моего понимания, причина, по которой технически это массив, заключается в том, что это коллекция JSON-объектов, эти объекты являются строками в моем CSV-файле?