PowerShell 2.0将pscustomobject转换成Json字符串
15 6月, 2015 在 Powershell小技巧 标签: JSON 来自 Mooser Lee
本文索引
[] 背景某哥们用Odata写了一个Web服务作为服务端,客户端需要将PowerShell脚本在机器上扫描的结果以Json格式上传到服务端。
本来ConvertTo-Json已经很方便了,可是目标操作系统可能是win7或着win 2k8,.NET framework的版本是2.0,PowerShell 的版本2.0,既没有ConvertTo-Json这条命令,也没有直接可以调用的.NET内置的类库。
所以我就写了一个简易版的ConvertToJson函数,可以将pscustomobject或着hashtable对象转换成Json字符串,一般标准的Json字符串应当是有缩进的,这里我只负责上传数据格式的正确性,不负责美观,所以没有实现。
ConvertToJson脚本 # # Description: Convert custom object to json string # Author:Mosser Lee () # function ConvertToJson { param( $InputObject ) if( $InputObject -is [string]){ "`"{0}`"" -f $InputObject } elseif( $InputObject -is [bool]) { $InputObject.ToString().ToLower() } elseif( $InputObject-eq $null){ "null" } elseif( $InputObject -is [pscustomobject]) { $result = "$space{`n" $properties = $InputObject | Get-Member -MemberType NoteProperty | ForEach-Object { "`"{0}`": {1}" -f $_.Name, (ConvertToJson $InputObject.($_.Name)) } $result += $properties -join ",`n" $result += "$space`n}" $result } elseif( $InputObject -is [hashtable]) { $result = "{`n" $properties = $InputObject.Keys | ForEach-Object { "`"{0}`": {1}" -f $_, (ConvertToJson $InputObject[$_]) } $result += $properties -join ",`n" $result += "`n}" $result } elseif( $InputObject -is [array]) { $result = "[`n" $items = @() for ($i=0;$i -lt $InputObject.length;$i++) { $items += ConvertToJson $InputObject[$i] } $result += $items -join ",`n" $result += "`n]" $result } else{ $InputObject.ToString() } } 测试 整数,浮点 PS> ConvertToJson 2 2 PS> ConvertToJson 3.14 3.14 字符串 PS> ConvertToJson '2' "2" 布尔 PS> ConvertToJson $true true 哈希表 PS> ConvertToJson @{A=3;B=4} { "A": 3, "B": 4 } 数组 PS> ConvertToJson @('PStips.NET','PowerShell',3) [ "PStips.NET", "PowerShell", 3 ] 复合对象 $obj = [pscustomobject]@{ A = 3 B = '4' C = $false D = 20,'40',$true,@{ 网站类型="博客" 域名="www.pstips.net" 年龄=30 } } ConvertToJson $obj输出:
{ "A": 3, "B": "4", "C": false, "D": [ 20, "40", true, { "网站类型": "博客", "域名": "www.pstips.net", "年龄": 30 } ] }本文链接:
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
相关文章推荐:
关于 Mooser Lee
我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。
参看所有文章 Mooser Lee →
发表评论
文章导航