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