Sto provando a convertire un hashtable in un oggetto json da utilizzare in un servizio Web con PowerShell 2.0.Come posso convertire un hastable in una stringa json in powershell?
$testhash = @{
Name = 'John Doe'
Age = 10
Amount = 10.1
MixedItems = (1,2,3,"a")
NestedHash = @{
nestedkey = "nextedvalue"
}
}
function toJson($obj){
$ms = New-Object IO.MemoryStream
$type = $obj.getType()
[Type[]]$types = ($obj | select -expand PsTypeNames | Select -unique) + [type]'System.Management.Automation.PSObject'
$js = New-Object System.Runtime.Serialization.Json.DataContractJsonSerializer $type, $types, ([int]::MaxValue), $false, $null, $false
$js.writeObject($ms, $obj) | out-null
$utf8.GetString($ms.ToArray(), 0, $ms.Length)
$ms.Dispose() | out-null
}
toJson $testhash
'[{"Key":"Name","Value":"John Doe"},{"Key":"Age","Value":10},{"Key":"Amount","Value":10.1},{"Key":"NestedHash","Value":[{"__type":"KeyValuePairOfanyTypeanyType:#System.Collections.Generic","key":"nestedkey","value":"nextedvalue"}]},{"Key":"MixedItems","Value":[1,2,3,"a"]}]'
sto usando DataContractJsonSerializer constructor in un modo che dovrebbe sopprimere le informazioni sul tipo, ma è ovviamente non. Sono anche divertito dall'estrarre coppie di chiavi e valori, ma mi piacerebbe che non lo facesse neanche. Che cosa sto facendo di sbagliato?
Questo mi sembra una cosa la funzione Serialize dovrebbe fare su di essa la propria, no? In entrambi i casi - questo funziona quasi perfettamente - fallisce su due livelli di hash annidati. – reconbot
@wizard - Dovrebbe essere per semplici hashtable, penso. Puoi sembrare aroudn, ci sono già script come ho collegato a fare l'analisi di JSON. – manojlds
Ho finito per usare http://poshcode.org/2930 che ha problemi ma funziona abbastanza bene - un giorno PowerShell 3.0 sarà disponibile e guarderò indietro a queste ore sprecate e sarò turbato – reconbot