Проблемы Windows PowerShell JSON для CSV "System.Object []" - PullRequest
0 голосов
/ 04 мая 2018

В течение 3 дней я пытался преобразовать файл JSON в CSV. К сожалению, я не слишком знаком с PowerShell, и любая помощь будет оценена. Вот строка JSON:

{"inputFile": [["Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10"], ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"], ["K", "L", "M", "N", "O", "P", "Q", "R", "S", "T"]]}

Командные строки, которые я пробовал:

ConvertFrom-JSON (Get-Content 'path.json' -Raw) |
    ConvertTo-Csv -NoTypeInformation |
    Select-Object -Skip 1 |
    Set-Content 'path.csv'

Get-Content 'path.json' -Raw |
    ConvertFrom-Json |
    Select -Expand inputFile |
    ForEach {$_.inputFile = $_.inputFile -join ' '$_} |
    Export-Csv 'path.csv' -NoTypeInformation

Ничего ...

Я надеюсь получить файл CSV с:

Column1, Column2, Column3, etc.
A,B,C,etc.

Какую комбинацию команд я могу использовать для этого?

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Так что это настолько запутанно, насколько это возможно, и я надеюсь, что кто-то еще ответит. Но это сработало для меня. Без изменения данных в вашем JSON я не уверен, что еще вам сказать.

$y = ''
$x = '{"inputFile": [["Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10"], ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"], ["K", "L", "M", "N", "O", "P", "Q", "R", "S", "T"]]}'
($x | ConvertFrom-JSON).inputfile | % {$_ | %{$y += ($_ + "`t")}; $y+="`n"}
$y | out-file x.csv

Это в основном просто манипуляции с текстом. Я создал его как разделитель табуляции, так как это было по умолчанию в Excel, но вы можете изменить его на что угодно.

0 голосов
/ 04 мая 2018

Export-Csv ожидает список объектов в качестве входных данных. Свойства объектов (идентифицируемые свойствами первого объекта) экспортируются как столбцы CSV. Чтобы командлет работал так, как вы ожидаете, ваши входные данные должны выглядеть следующим образом:

{
    "inputFile": [
        {
            "Column1": "A",
            "Column2": "B",
            ...
        },
        {
            "Column1": "K",
            "Column2": "L",
            ...
        }
    ]
}

В вашем случае у вас есть каждая строка в отдельном массиве, поэтому проще просто объединить эти массивы, а затем записать вывод в виде текстового файла:

Get-Content 'path.json' -Raw |
    ConvertFrom-Json |
    Select-Object -Expand inputFile |
    ForEach-Object { $_ -join ',' } |
    Set-Content 'path.csv'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...