PowerShell 7:将带Path信息的PSCustomObject转换为嵌套JSON
还原扁平PSCustomObject为嵌套JSON的简便方法
直接用自定义PowerShell函数就能搞定,不用手动循环拆分路径。这个函数会自动解析扁平对象里的路径属性,逐层构建嵌套结构:
function ConvertFrom-FlatObject { param( [Parameter(Mandatory, ValueFromPipeline)] [PSCustomObject]$InputObject ) $result = [PSCustomObject]@{} foreach ($property in $InputObject.PSObject.Properties) { # 拆分路径(去掉开头的$.,按.分割节点) $pathParts = $property.Name -replace '^\$\.', '' -split '\.' $currentNode = $result # 遍历路径节点,逐层创建嵌套对象 for ($i = 0; $i -lt $pathParts.Count; $i++) { $part = $pathParts[$i] # 如果是最后一个节点,赋值;否则创建嵌套对象 if ($i -eq $pathParts.Count - 1) { $currentNode | Add-Member -MemberType NoteProperty -Name $part -Value $property.Value -Force } else { if (-not $currentNode.PSObject.Properties[$part]) { $currentNode | Add-Member -MemberType NoteProperty -Name $part -Value ([PSCustomObject]@{}) -Force } $currentNode = $currentNode.$part } } } return $result }
使用示例
假设你的扁平合并对象是$flatMergedObject,直接用下面的代码就能转成嵌套JSON:
$nestedObject = $flatMergedObject | ConvertFrom-FlatObject $nestedJson = $nestedObject | ConvertTo-Json -Depth 100
说明
- 函数自动识别属性名里的路径格式(比如
$.user.profile.name),拆分后逐层创建嵌套PSCustomObject -Force参数用于覆盖可能存在的重复路径属性ConvertTo-Json时记得加-Depth,避免嵌套层级过深被截断
内容的提问来源于stack exchange,提问作者njefsky
相关产品推荐
相关产品推荐

