В PowerShell я пытаюсь преобразовать файл CSV в JSON с помощью вложенного массива объекта Size путем группировки продуктов. В приведенном ниже коде $ ProductLines исходят из CSV-файла в качестве объекта powershell.
$UniqueProducts = $ProductLines | Group-Object -Property 'ProductNumber' | ForEach-Object {
$SizeObj = ($_.Group | Select-Object -Property `
@{name="SizeCode"; Expression = {$_.Sizes}}, @{name="UPC"; Expression = {$_.UPCNo}} `
)
#$SizeObj | ConvertTo-Json -depth 10 | Out-File "C:\POWERSHELL\Sizes.txt"
$_.Group | Select-Object -Property ProductNumber, ProductName, `
@{name="Sizes"; Expression = {$SizeObj}} -Unique
}
$UniqueProducts | ConvertTo-Json -depth 10 | Out-File "C:\POWERSHELL\UniqueProducts.txt"
Приведенный выше код создает файл JSON со структурой ниже с дополнительным слоем , значение: и Количество:
[
{
"ProductNumber": "EBAGS101-00008",
"ProductName": "EBAGS101",
"Sizes": {
"value": [
{
"SizeCode": "XS",
"UPC": "201112291509"
},
{
"SizeCode": "S",
"UPC": "201112291510"
}
],
"Count": 2
}
},
{
"ProductNumber": "EBAGS101-001",
"ProductName": "EBAGS101",
"Sizes": {
"value": [
{
"SizeCode": "XS",
"UPC": ""
},
{
"SizeCode": "S",
"UPC": "098617106215"
}
],
"Count": 2
}
}
]
Как я могу удалить слой value и Count из моего результата. Когда я вывожу только $ SizeObj, у него нет значения и количества, я не уверен, как значение и Количество заканчиваются в $ UniquProducts. В своем конечном результате я пытаюсь создать SizeObj в следующем формате (без значения и количества):
"Sizes": [
{
"SizeCode": "XS",
"UPC": "201112291509"
},
{
"SizeCode": "S",
"UPC": "201112291510"
}
]
ОБНОВЛЕНИЕ: с использованием ответа, предоставленного @RoadRunner, вот измененное решение с источником CSV; где $ ProductLines - это преобразованный объект Powershell из CSV-файла:
$Products = New-Object -TypeName System.Collections.ArrayList
$ProductLines | Group-Object -Property 'ProductNumber' | ForEach-Object {
$SizeRanges = New-Object -TypeName System.Collections.ArrayList
foreach ($object in $_.Group) {
$SizeVal = [PSCustomObject]@($object | Select-Object -Property `
@{name="SizeCode"; Expression = {$_.Sizes}}, `
@{name="UPC"; Expression = {$_.UPCNo}}`
)
$SizeRanges.AddRange($SizeVal)|Out-Null
}
$grp = $_.Group[0];
$product = [PSCustomObject]@{
ProductNumber = $grp.ProductNumber
ProductName = $grp.ProductName
Sizes = $SizeRanges
}
$products.Add($product)|Out-Null
} | ConvertTo-Json -Depth 3 | Out-File -FilePath output.json