在powershell中,我尝试通过对产品分组来将CSV文件转换为带有Size对象嵌套数组的JSON。在下面的代码中,$ProductLines来自作为powershell对象的CSV文件。
$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时,它没有value和Count,我不确定value和Count如何在$UniquProducts中结束。在我的最终结果中,我尝试以以下格式创建SizeObj(没有value和Count):
"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
2条答案
按热度按时间uxh89sit1#
我只需要用您想要保留的属性重新构建JSON。
首先,您可以使用
Get-Content
和ConvertFrom-Json
获取JSON数据。然后,您可以迭代每个JSON对象,创建一个新的PSCustomObject
,它保留ProductNumber
、ProductName
和Sizes
属性,其中Sizes
就是Sizes.value
的数组。然后,我们可以使用ConvertTo-Json
转换为JSON结构。用-Depth 3
保留前三个级别,用Out-File
将结果导出到输出文件。您还可以将上述逻辑集成到已有的逻辑中,这样就不需要首先重新构建JSON。遗憾的是,我无法真正展示如何做到这一点,因为我只能看到您正在生成的JSON,所以我只能推荐一种解决方案,以根据您的要求重新构建JSON。
gtlvzcf82#
解决方法:
Remove-TypeData -TypeName System.Array