我将JSON从Azure资源组导出到JSON文件,如下所示:
Export-AzureRmResourceGroup -ResourceGroupName $SourceResourceGroupName -Path $filename
然后我获取文件的JSON内容,然后将其应用于变量:
$SourceJSON = Get-Content $filename -Raw
然后我想将其转换(转换)为PowerShell对象:
$SourceJSONRG = $SourceJSON | ConvertFrom-Json
然后我看看对象的资源:
$SourceJSONRG.resources
但是storageProfile
部分是空白的:
相比之下,查看JSON($SourceJSON
),storageProfile
不是空白:
我尝试过使用Format-Custom -Depth
选项更深入了解:
$SourceJSONRG = $SourceJSON | ConvertFrom-Json
$SourceJSONRG = $SourceJSONRG | Format-Custom -Depth 99
但是这会把“class PSCustomObject
”放到任何我不想要的地方。
我在这里尝试做的最终事情是将JSON转换为PowerShell对象,对其进行更改,例如更改磁盘的URI,然后转换回JSON以将其用于部署到Azure。换句话说,将JSON转换为PowerShell对象使我更容易使用它。
New-AzureRmResourceGroupDeployment -ResourceGroupName $TargetResourceGroupName -TemplateFile "C:\Users\marc\AppData\Local\Temp\test20692192.json"
答案 0 :(得分:3)
我认为这只是停止显示嵌套值的问题,但这并不意味着缺少值。
您可以通过以下示例看到。给定一个类似下面的示例JSON字符串并将其转换为JSON对象会产生相同的“缺失”值
$jsonString = @"
{
"root": {
"nested1": {
"nested11": {
"leaf1": "some value",
"leaf2": "some other value"
}
},
"nested2": {
"nested22": {
"leaf1": "some value",
"leaf2": "some other value"
}
}
}
}
"@
$obj = ConvertFrom-Json $jsonString
$obj
输出:
root
----
@{nested1=; nested2=}
但是当访问和修改实际对象的属性并将其转换回JSON字符串时,您将看到一切正常
$obj.root.nested1.nested11.leaf1 = "42"
$jsonString = ConvertTo-Json $obj -Depth 5
Write-Host $jsonString
输出:
{
"root": {
"nested1": {
"nested11": {
"leaf1": "42",
"leaf2": "some other value"
}
},
"nested2": {
"nested22": {
"leaf1": "some value",
"leaf2": "some other value"
}
}
}
}