相关疑难解决方法(0)

ConvertFrom-json的哈希表与powershells内置哈希表有不同的类型,我如何使它们相同?

我有一个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?

powershell json

15
推荐指数
3
解决办法
2万
查看次数

标签 统计

json ×1

powershell ×1