json - Powershell JSON管道将多个值扩展为一列csv
问题描述
我正在尝试使用 Powershell 自动化一些数据管道,但我有点坚持将 JSON 列表转换为 CSV 文件中每行的单个单元格。希望你们中的一些人可以帮助我。
我得到的 JSON 如下所示:
{"result": [
{
"uid": "1",
"EducationHistory": []
},
{
"uid": "2",
"EducationHistory": []
},
{
"uid": "3",
"EducationHistory": []
},
{
"uid": "4",
"EducationHistory": {
"10466632": {
"euid": 10466632,
"degree": "Highschool",
"educationLevel": null
},
"10466634": {
"euid": 10466634,
"degree": "Law",
"educationLevel": "batchelor"
},
"10466635": {
"euid": 10466635,
"degree": "Law",
"educationLevel": "master"
}
}
},
{
"uid": "5",
"EducationHistory": {
"10482462": {
"euid": 10482462,
"degree": "IT",
"educationLevel": "master"
}
}
}
]
}
我想要做的是educationLevel
在一列中收集每个 uid 的 s。所以是这样的:
uid | educationLevel
----+------------------
1 |
2 |
3 |
4 | barchelor, master
5 | master
通常我希望 Expandproperty 降低到较低级别,但这不适用于这种情况,因为每个 EducationHistory 条目都位于该特定条目的 euid 后面。由于记录的数量,像下面的示例中那样扩展它们中的每一个是不可行的。
所以我认为我需要一些循环,但我不知道如何。希望您能够帮助我。第一次在这里发帖和一个Powershell新手,所以我希望我的问题很清楚。如果您需要更多信息,请告诉我。
一个条目的代码,例如:
$json = Get-content -raw -path C:\TEMP\File.json
(ConvertFrom-Json -InputObject $json).result |
Select-Object uid,
#Expand one of the entries:
@{Name = "Edu.Level";E={$_.EducationHistory | Select-Object -
expandproperty 10466632 |Select-Object -expandpropert degree }} |
Format-Table
解决方案
$content = Get-Content .\test.json
$result = ($content | ConvertFrom-Json).result
$totalResult = @()
foreach($res in $result) {
$tempArray = @()
if($res.EducationHistory -ne $null) {
$properties = $res.EducationHistory | Get-Member -MemberType NoteProperty
foreach($property in $properties) {
$eduLevel = $res.EducationHistory.$($property.Name).educationLevel
if(![String]::IsNullOrEmpty($eduLevel)) {
$tempArray += $eduLevel
}
}
}
$totalResult += [PSCustomObject]@{
uid = $res.uid
educationLevel = $tempArray -join ", "
}
}
$totalResult
这将为您提供的输入输出所需的结果。最棘手的部分是EducationHistory
财产的价值。您必须使用Get-Member
cmdlet(请参阅 参考资料Get-Help Get-Member
)在循环中获取当前对象的属性。然后使用属性的名称来访问educationLevel
.
推荐阅读
- docker - Docker 从工件中拉取
- c# - 删除表达式树中的强制转换操作
- python - 将两个直流电机的值转换为角度(单输出)
- dart - 在 Dart 中的迭代器上创建 sum、min、max 属性
- javascript - 如何使用 Koa-static 在 html 文件中添加 React 组件?
- python - 在 django 中找不到页面不应该上升的错误
- wordpress - Woocommerce 特定类别的总库存数
- r - 是否可以在 xaringan 演示文稿中包含 pdf 图像?
- windows-subsystem-for-linux - powershell.exe -command get-clipboard 如果重定向会修改我的终端字体
- node.js - Socket.IO 和 Electron 不能发射或接收