Powershell ConvertFrom Json:基于属性名称选择嵌套数组的值



我有一个json文件,我正试图使用powershell将其导出到csv,但我只需要某些嵌套值。它看起来如下:

[
{
"ItemName": "A",
"ItemID": "I001",
"ItemDate": "2021-03-01",
"ItemValue": "1000",
"ItemTags": [
{
"Name": "First tag name",
"Value": "medium"
},
{
"Name": "Another tag name",
"Value": "red"
},
{
"Name": "Tag 3",
"Value": null
},
{
"Name": "Tag 4",
"Value": "Yes"
}
]
},
{
"ItemName": "B",
"ItemID": "I002",
"ItemDate": "2021-02-01",
"ItemValue": "3000",
"ItemTags": [
{
"Name": "First tag name",
"Value": "best"
},
{
"Name": "Another tag name",
"Value": "green"
},
{
"Name": "Tag 3",
"Value": null
},
{
"Name": "Tag 4",
"Value": "No"
}
]
}
]

嵌套的";项目标签";这部分是我遇到麻烦的地方。实际的json文件有几十个Item标签,它们的顺序可能会有所不同,所以我想做的是只选择基于";名称";例如,选择ItemTag值,其中ItemTag Name为Tag 4。

我只能根据订单这样做:


$obj1 = Get-Content -Path "C:Tempsample.json"  | ConvertFrom-Json
$obj1 | select ItemName, ItemID, ItemDate, ItemValue, @{Name = 'Tag 4'; Expression ={$_.ItemTags[3].Value}} | Export-CSV "C:Tempitems.csv" -NoTypeInformation

但是,因为ItemTags的排序可能会有所不同,所以这不会完全做到;标签4"?

这对我有效:

Expression = { ($_.ItemTags | Where-Object Name -eq 'Tag 4').Value }

通过仅指定$_.ItemTags,我们将创建一个包含所有ItemTags对象的数组。使用Where-Object,我们只选择这些元素,它们的Name成员等于'Tag 4'。最后,我们从得到的元素中得到Value成员。请注意,当有多个匹配元素时,这将是一个数组,对于您的样本数据('Yes','No'(也是如此。

最新更新