我有一个json文件(test.json),看起来像这样:
{
"root":
{
"key":"value"
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用类似这样的东西将它加载到powershell中:
PS > $data = [System.String]::Join("", [System.IO.File]::ReadAllLines("test.json")) | ConvertFrom-Json
root
----
@{key=value}
Run Code Online (Sandbox Code Playgroud)
我希望能够枚举由json文件定义的'hashtable'之类的对象的键. 所以,理想情况下,我希望能够做到这样的事情:
$data.root.Keys
Run Code Online (Sandbox Code Playgroud)
并得到["关键"].我可以使用PowerShell中的内置哈希表来做到这一点,但是使用从json加载的哈希表来做这件事并不那么明显.
在对此进行故障排除时,我注意到ConvertFrom-json返回的字段与Powershell的哈希表的字段类型不同.例如,在内置哈希表上调用.GetType()会显示它的类型为'Hashtable':
PS > $h = @{"a"=1;"b"=2;"c"=3}
PS > $h.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Hashtable System.Object
Run Code Online (Sandbox Code Playgroud)
为我的json对象做同样的事情会产生PSCustomObject:
PS > $data.root.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False PSCustomObject System.Object
Run Code Online (Sandbox Code Playgroud)
有没有办法将此对象转换或转换为典型的PowerShell Hashtable?