将JSON转换为PowerShell对象并将PowerShell转换回JSON

时间:2016-08-18 00:00:31

标签: json powershell azure

我将JSON从Azure资源组导出到JSON文件,如下所示:

Export-AzureRmResourceGroup -ResourceGroupName $SourceResourceGroupName -Path $filename

然后我获取文件的JSON内容,然后将其应用于变量:

$SourceJSON = Get-Content $filename -Raw 

然后我想将其转换(转换)为PowerShell对象:

$SourceJSONRG = $SourceJSON | ConvertFrom-Json 

然后我看看对象的资源:

$SourceJSONRG.resources

但是storageProfile部分是空白的:

enter image description here

相比之下,查看JSON($SourceJSON),storageProfile不是空白:

enter image description here

我尝试过使用Format-Custom -Depth选项更深入了解:

$SourceJSONRG = $SourceJSON | ConvertFrom-Json
$SourceJSONRG = $SourceJSONRG | Format-Custom -Depth 99

但是这会把“class PSCustomObject”放到任何我不想要的地方。

enter image description here

我在这里尝试做的最终事情是将JSON转换为PowerShell对象,对其进行更改,例如更改磁盘的URI,然后转换回JSON以将其用于部署到Azure。换句话说,将JSON转换为PowerShell对象使我更容易使用它。

New-AzureRmResourceGroupDeployment -ResourceGroupName $TargetResourceGroupName -TemplateFile "C:\Users\marc\AppData\Local\Temp\test20692192.json"

1 个答案:

答案 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"
                                              }
                             }
             }
}