本文目录
背景
某哥们用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 (https://www.pstips.net)
#
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
}
]
}
本文链接: https://www.pstips.net/convert-pscustomobject-to-json.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
