Powershell:读取嵌套json

Powershell:读取嵌套json,powershell,databricks,Powershell,Databricks,我正在尝试基于外部json文件在我的databricks集群上安装库 文件的结构如下所示: {"libraries":[ { "pypi": { "package": "sparkmeasure==0.14.0" } }, { "maven": { "coordinates": &qu

我正在尝试基于外部json文件在我的databricks集群上安装库

文件的结构如下所示:

{"libraries":[

    {
      "pypi": {
        "package": "sparkmeasure==0.14.0"
      }
    },
    {
      "maven": {
        "coordinates": "azureml-core==1.20.0"
      }
    }
]
}
然后我尝试读取文件,构建请求主体并调用rest方法

$json = Get-Content $filePath| Out-String | ConvertFrom-Json -Depth 99 

$Region = $Region.Replace(" ", "")

$uri = "https://$Region.azuredatabricks.net/api/2.0/libraries/install"

$Body = @{ "cluster_id" = $ClusterId }

$Body['libraries'] = $json.libraries
$BodyText = $Body | ConvertTo-Json
Write-Output $BodyText 

Invoke-RestMethod -Uri $uri -Body $BodyText -Method 'POST' -Headers @{ Authorization = $InternalBearerToken }
这是我得到的输出体:

{
  "libraries": [
    {
      "pypi": "@{package=sparkmeasure==0.14.0}"
    },
    {
      "maven": "@{coordinates=azureml-core==1.20.0}"
    }
  ],
  "cluster_id": "myclusterid"
}
但是,我只需要从文件中获取值,因此我的预期结果如下所示:

{
  "libraries": [
    
        {
          "pypi": {
            "package": "sparkmeasure==0.14.0"
          }
        },
        {
          "maven": {
            "coordinates": "azureml-core==1.20.0"
          }
        }
    ],
  "cluster_id": "myclusterid"
}

我对PowerShell非常陌生,所以我想知道是否有一些简单的方法来保留json文件的结构,而不是将这些嵌套结构作为数组?

在这种情况下,您可以使用simple replace,从下面的输出中得到:

我只是使用您的输出,然后将其向前推进

$a = @'
{
  "libraries": [
    {
      "pypi": "@{package=sparkmeasure==0.14.0}"
    },
    {
      "maven": "@{coordinates=azureml-core==1.20.0}"
    }
  ],
  "cluster_id": "myclusterid"
}
'@
($a.Replace('@{','')).replace('}"','"')   #This is what will replace the things as per your need.

同样,在转换为JSON时,只需添加Jeroen所表示的
-Depth
,将
-Depth
添加到
转换为JSON
中。其缺点是:不幸的是,
转换为JSON
的默认递归深度为
2
,导致更深入的嵌套对象被截断(切断并用
.ToString()
的结果表示;在v7.1+中,发生这种情况时,您至少会收到一条警告)。使用具有足够高数字的
-Depth
参数,如中所示。