我该如何输出一个嵌套的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
用户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"}}