You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell提取NoteProperty对象并导出CSV及结构化访问

解决方案:PowerShell 嵌套数据导出CSV及结构化访问

1. 导出指定格式的CSV文件

由于CSV无法直接存储嵌套对象,我们需要先将嵌套属性序列化为JSON字符串,再导出为CSV。以下代码会将每个用户(johndoe/johndoe2)转换为一行数据,匹配需求中的表头:

# 处理原始嵌套数据,转换为扁平对象数组
$processedPersons = $personData.persons[0].psobject.Properties | ForEach-Object {
    $userData = $_.Value[0]
    [PSCustomObject]@{
        id              = $userData.id
        family_address  = $userData.family_adress | ConvertTo-Json -Compress
        childrens       = $userData.childiren | ConvertTo-Json -Compress
        years_activitys = $userData.years_activity | ConvertTo-Json -Compress
    }
}

# 导出到CSV文件(路径可自行修改)
$processedPersons | Export-Csv -Path "./persons.csv" -NoTypeInformation -Encoding UTF8

2. 读取CSV并遍历打印(展开子数组)

读取CSV时需要将JSON字符串反序列回对象,再遍历打印属性,对数组类型的years_activitys单独展开:

# 读取CSV并反序列化嵌套属性
$personsFromCsv = Import-Csv -Path "./persons.csv" | ForEach-Object {
    $_ | Select-Object `
        id,
        @{Name='family_address'; Expression={$_.family_address | ConvertFrom-Json}},
        @{Name='childrens'; Expression={$_.childrens | ConvertFrom-Json}},
        @{Name='years_activitys'; Expression={$_.years_activitys | ConvertFrom-Json}}
}

# 遍历打印每个用户的属性
foreach ($person in $personsFromCsv) {
    Write-Host "id: $($person.id)"
    Write-Host "family_address:"
    $person.family_address.psobject.Properties | ForEach-Object {
        Write-Host "  $($_.Name): $($_.Value)"
    }
    Write-Host "childrens:"
    $person.childrens.psobject.Properties | ForEach-Object {
        Write-Host "  $($_.Name): $($_.Value)"
    }
    Write-Host "years_activitys:"
    $person.years_activitys.psobject.Properties | ForEach-Object {
        Write-Host "  年份: $($_.Name)"
        Write-Host "    条目:"
        $_.Value | ForEach-Object { Write-Host "      - $_" }
    }
    Write-Host "-------------------------"
}

3. 结构化访问years_activitys的键值对

通过psobject.Properties可以直接遍历years_activitys的键值对,实现结构化访问。如果需要按用户名定位用户,可在导出CSV时添加username字段:

步骤1:导出时保留用户名

$processedPersons = $personData.persons[0].psobject.Properties | ForEach-Object {
    [PSCustomObject]@{
        username        = $_.Name  # 添加用户名字段
        id              = $_.Value[0].id
        family_address  = $_.Value[0].family_adress | ConvertTo-Json -Compress
        childrens       = $_.Value[0].childiren | ConvertTo-Json -Compress
        years_activitys = $_.Value[0].years_activity | ConvertTo-Json -Compress
    }
}
$processedPersons | Export-Csv -Path "./persons.csv" -NoTypeInformation -Encoding UTF8

步骤2:按用户名结构化访问

$personsFromCsv = Import-Csv "./persons.csv" | ForEach-Object {
    $_ | Select-Object `
        username,
        id,
        @{Name='family_address'; Expression={$_.family_address | ConvertFrom-Json}},
        @{Name='childrens'; Expression={$_.childrens | ConvertFrom-Json}},
        @{Name='years_activitys'; Expression={$_.years_activitys | ConvertFrom-Json}}
}

# 定位目标用户
$targetUsername = "johndoe"
$targetPerson = $personsFromCsv | Where-Object { $_.username -eq $targetUsername }

# 遍历years_activitys的键值对
foreach ($activity in $targetPerson.years_activitys.psobject.Properties) {
    Write-Host "key: $($activity.Name)"
    Write-Host "value:"
    $activity.Value | ForEach-Object { Write-Host "  - $_" }
}

内容的提问来源于stack exchange,提问作者Ichigo Kurosaki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:12:53