Создайте определенный файл JSON из CSV в PowerShell - PullRequest
0 голосов
/ 04 января 2019

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

CSV-файл содержит столбцы:

хозяин | сообщение | время | серьезность | источник |

{
"time": 1437522387,
"host": "dataserver992.example.com",
"event": { 
    "message": "Something happened",
    "severity": "INFO",
    "source": "testapp"
    #...All columns except for time and host should be under "event"
    }
}

* Единственными гарантированными столбцами являются время и хост. Все остальные заголовки столбцов варьируются от файла к файлу.

Это часть того, что я имею до сих пор:

$csvFile = Import-Csv $filePath


function jsonConverter($file)
{    
    #Currently not in use
    $eventString = $file| select * -ExcludeProperty time, host 


    $file | Foreach-Object {
        Write-Host '{'
        Write-Host '"host":"'$_.host'",'
        Write-Host '"time":"'$_.time'",'

        Write-Host '"event":{'

        #TODO: Put all other columns (key, values) under event - Except for 
        time and host

        Write-Host '}'
    }    
}

jsonConverter($csvFile)

Любые идеи о том, как я могу извлечь только оставшиеся столбцы, строка за строкой, выводя его содержимое в ключ, значение формата JSON, как в примере выше? Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 января 2019

При условии, что ваш CSV выглядит так:

"host","message","time","severity","source"
"dataserver992.example.com","Something happened","1437522387","INFO","testapp"

этот скрипт:

$filepath = '.\input.csv'
$csvData = Import-Csv $filePath

$NewCsvData  = foreach($Row in $csvData){
   [PSCustomObject]@{
       time  =  $Row.time
       host  =  $Row.host
       event = ($Row| Select-Object -Property * -ExcludeProperty time,host)
   }
}

$NewCsvData | ConvertTo-Json

выведет этот Json:

{
    "time":  "1437522387",
    "host":  "dataserver992.example.com",
    "event":  {
                  "message":  "Something happened",
                  "severity":  "INFO",
                  "source":  "testapp"
              }
}
0 голосов
/ 04 января 2019

Если ваша версия powershell 3.0 или выше (должна):

Import-CSV $filepath | ConvertTo-JSON

Готово!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...