function ConvertTo-Hashtable {
[CmdletBinding()]
[OutputType('hashtable')]
param (
[Parameter(ValueFromPipeline)]
$InputObject
)
process {
## Return null if the input is null. This can happen when calling the function
## recursively and a property is null
if ($null -eq $InputObject) {
return $null
}
## Check if the input is an array or collection. If so, we also need to convert
## those types into hash tables as well. This function will convert all child
## objects into hash tables (if applicable)
if ($InputObject -is [System.Collections.IEnumerable] -and $InputObject -isnot [string]) {
$collection = @(
foreach ($object in $InputObject) {
ConvertTo-Hashtable -InputObject $object
}
)
## Return the array but don't enumerate it because the object may be pretty complex
Write-Output -NoEnumerate $collection
} elseif ($InputObject -is [psobject]) { ## If the object has properties that need enumeration
## Convert it to its own hash table and return it
$hash = @{}
foreach ($property in $InputObject.PSObject.Properties) {
$hash[$property.Name] = ConvertTo-Hashtable -InputObject $property.Value
}
$hash
} else {
## If the object isn't an array, collection, or other object, it's already a hash table
## So just return it.
$InputObject
}
}
7条答案
按热度按时间nxowjjhe1#
改编自PSCustomObject to Hashtable
mbzjlibv2#
这里的讨论有点晚,但在PowerShell 6(核心)中,ConvertFrom-Json中有一个
-AsHashtable
参数。mkh04yzy3#
JavaScriptSerializer从.NET3.5开始可用(可能安装在XP上,包括在Win7和更新版本中),它比Convert-FromJSON快几倍,并且可以正确解析嵌套对象,数组等。
klr1opcd4#
这篇文章的答案是一个很好的开始,但是当你开始使用更复杂的json表示时,这个答案有点天真。
下面的代码将解析嵌套的JSON数组和JSON对象。
l3zydbqr5#
我相信Converting JSON to a hashtable中提供的解决方案更接近于ConvertFrom-Json的PowerShell 6.0实现
我尝试了几个JSON源,我总是得到正确的哈希表。
ffx8fchx6#
从这里的链接导入代码https://4sysops.com/archives/convert-json-to-a-powershell-hash-table/
}然后我们可以通过管道调用这个函数:$json|ConvertFrom-Json|ConvertTo-HashTable
ih99xse17#
你可以写一个函数把psobject转换成hashtable。
我在这里写了一个答案:enter link description here