如何使用PowerShell将嵌套的JSON哈希表的内容输出到PSO?

问题描述 投票:1回答:1

如何在一行中将嵌套的JSON哈希表的全部内容输出到PSO?

$json = @"
{
    "outer": "value1",
    "outerArray": [
        "value2",
        "value3"
    ],
    "outerHash": {
        "inner": "value4",
        "innerArray": [
            "value5",
            "value6"
        ],
        "innerHash": {
            "innermost1": "value7",
            "innermost2": "value8",
            "innermost3": "value9"
        }
    }
}
"@

当前行为:仅显示一个“级别”

$json | ConvertFrom-Json
outer  outerArray       outerHash                                              
-----  ----------       ---------                                              
value1 {value2, value3} @{inner=value4; innerArray=System.Object[]; innerHash=}

所需行为:递归扩展并显示所有哈希/数组内容

$json | ConvertFrom-Json
outer  outerArray       outerHash                                              
-----  ----------       ---------                                              
value1 {value2, value3} @{inner=value4; innerArray=@(value5, value6); innerHash=@{innermost1=value7; innermost2=value8; innermost3=value9}}

以下内容似乎在主题上引起轰动,但未达到预期的效果:PowerShell Hashtable from JSONPSCustomObject to HashtableHow to output multiple hash tables in Powershell

arrays json powershell hash expand
1个回答
0
投票

用户atscripter将以下消息发送给包'ConvertTo-Expression'的所有者:

我在尝试修改PowerShell的默认行为时遇到了您的” flatten-object“文章。我寻求了关于stackoverflow和technet的帮助,而不是从头开始编写代码,我想知道这样做有多困难?调整“展平对象”以达到所需的效果?似乎该功能确实很难遍历对象,因为我只是不够熟练,无法以所需的格式输出它们,您的输入将不胜感激!

您不必为此重写flatten-object cmdlet或flatten-object cmdlet。您只需要遍历first级别,然后在每个属性上调用ConvertTo-Expression cmdlet(或本机ConvertTo-Expression cmdlet):

PowerShell格式:

ConvertTo-Expression

结果:

ConvertTo-Json

Json格式:

$Properties = @{}
($Json | ConvertFrom-Json).PSObject.Properties |
    ForEach-Object {$Properties.($_.Name) = $_.Value |
        ConvertTo-Expression -Expand -1}
[PSCustomObject]$Properties

结果与(Json)格式略有不同:

outer    outerArray        outerHash
-----    ----------        ---------
'value1' 'value2','value3' [PSCustomObject]@{'inner'='value4';'innerArray'='value5','value6';'innerHash'=[PSCustomObject]@{'innermost1'='value7';'innermost2'='value8';'innermost3'='value9'}}
© www.soinside.com 2019 - 2024. All rights reserved.