在PowerShell中JSON嵌套哈希表的输出整个内容

问题描述 投票: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 JSON PSCustomObject to Hashtable How to output multiple hash tables in Powershell

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

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

flatten-object“我在您来到‘’一文中,我试图修改的PowerShell的默认行为。我所追求的计算器和TechNet的帮助,而不是从头开始编写代码,我不知道如何困难会是扭捏‘扁平化对象’达到预期的效果呢?这似乎该函数通过迭代对象的困难的部分,我只是没有熟练足以能够让他们到输出所需的格式。您的意见是非常感谢!”

你不必重写flatten-object cmdlet或ConvertTo-Expression cmdlet的这一点。 你只需要通过第一级迭代,然后调用每个属性ConvertTo-Expression小命令(或本机ConvertTo-Json cmdlet的):

在PowerShell中格式:

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

结果是:

outer    outerArray        outerHash
-----    ----------        ---------
'value1' 'value2','value3' [PSCustomObject]@{'inner'='value4';'innerArray'='value5','value6';'innerHash'=[PSCustomObject]@{'innermost1'='value7';'innermost2'='value8';'innermost3'='value9'}}

JSON格式:

($Json | ConvertFrom-Json).PSObject.Properties |
    ForEach-Object {$Properties.($_.Name) = $_.Value |
        ConvertTo-Json -Depth 5 -Compress}

结果在一个稍微不同的(JSON)格式:

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