PowerShell技术问题:如何生成带累积嵌套属性的JSON输出
解决嵌套Foreach生成嵌套JSON的问题
假设你已经通过API获取到父级结果集合$parentResults(每个元素是包含Name、TotalSize、FileCount的CustomObject),以下是通过嵌套循环填充Files属性并生成目标JSON的具体实现:
# 模拟父级API返回的结果集合(实际场景替换为你的API调用结果) $parentResults = @( [PSCustomObject]@{ Name = "Value1" TotalSize = 15 FileCount = 2 Files = @() # 预先初始化空数组,用于后续填充文件数据 }, [PSCustomObject]@{ Name = "Value2" TotalSize = 15 FileCount = 2 Files = @() } ) # 嵌套循环处理每个父对象,获取关联文件数据并更新Files属性 foreach ($parent in $parentResults) { # 替换为你的实际API调用逻辑:根据父对象标识(如Name)获取关联文件列表 # 示例:$fileResults = Invoke-RestMethod -Uri "https://your-api/files?parent=$($parent.Name)" -Method Get # 模拟API返回的文件结果 $fileResults = @( [PSCustomObject]@{ FileName = "File1" Checksum = "abc" }, [PSCustomObject]@{ FileName = "File2" Checksum = "abc" } ) # 将获取到的文件集合直接赋值给父对象的Files属性 $parent.Files = $fileResults } # 转换为指定格式的JSON,注意-Depth参数要覆盖嵌套层级(默认深度为2) $finalJson = $parentResults | ConvertTo-Json -Depth 3 # 输出JSON或保存到文件 Write-Output $finalJson # 保存到文件:$finalJson | Out-File -Path "metadata.json" -Encoding UTF8
关键注意事项
- 父对象初始化时要给
Files属性设置空数组,避免后续赋值出错 - 使用
ConvertTo-Json必须指定足够的-Depth值,否则嵌套的Files数组会被截断 - 如果API返回的文件数据结构和需求不一致,可在赋值前用
Select-Object或自定义PSCustomObject调整字段
内容的提问来源于stack exchange,提问作者CD007
相关产品推荐
相关产品推荐

