Tôi đang cố gắng chuyển đổi một hashtable thành một đối tượng json để sử dụng trong một dịch vụ web với PowerShell 2.0.Làm thế nào tôi có thể chuyển đổi một hastable thành một chuỗi json trong 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"]}]'
Tôi đang sử dụng DataContractJsonSerializer constructor theo cách nên chặn thông tin loại nhưng rõ ràng là không. Tôi cũng thích thú vì nó trích xuất các cặp khóa và giá trị nhưng tôi cũng muốn nó không làm điều đó. Tôi đang làm gì sai?
Điều này có vẻ giống như chức năng tuần tự hóa nên tự thực hiện, phải không? Dù bằng cách nào - điều này hoạt động gần như hoàn hảo - không thành công trên hai cấp độ băm lồng nhau. – reconbot
@wizard - Đó là nghĩa vụ phải được cho hashtables đơn giản tôi nghĩ. Bạn có thể xem xét aroudn, đã có các kịch bản như tôi đã liên kết để thực hiện phân tích cú pháp JSON. – manojlds
Tôi đã kết thúc bằng cách sử dụng http://poshcode.org/2930 trong đó có vấn đề nhưng hoạt động tốt đủ - một ngày powershell 3.0 sẽ có sẵn và tôi sẽ nhìn lại những giờ lãng phí và bị khó chịu – reconbot