【发布时间】:2020-04-03 03:30:29
【问题描述】:
在 powershell 中,我试图通过对产品进行分组,将 CSV 文件转换为带有嵌套数组 Size 对象的 JSON。在下面的代码中 $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 文件,附加层 value: 和 Count:
[
{
"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 时,它没有 value 和 Count,我不确定 value 和 Count 如何在 $UniquProducts 中结束。在我的最终结果中,我试图以以下格式创建 SizeObj(没有值和计数):
"Sizes": [
{
"SizeCode": "XS",
"UPC": "201112291509"
},
{
"SizeCode": "S",
"UPC": "201112291510"
}
]
更新: 这里使用@RoadRunner 提供的答案是带有 csv 源的修改后的解决方案;其中 $ProductLines 是从 csv 文件转换的 Powershell 对象:
$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
【问题讨论】:
标签: powershell