循环访问 json 自定义对象



我正在尝试使用PowerShell对JSON文件执行一些配置转换。为此,有几个输入 json 文件和一个转换文件(每个环境一个(。

输入样本 ( AzureStorage.json (:

{
"$schema": "http://datafactories.schema.management.azure.com/schemas/2015-09-01/Microsoft.DataFactory.LinkedService.json",
"name": "AzureStorage",
"properties": {
"type": "AzureStorage",
  "typeProperties": {
    "connectionString": "My Connection String here"
  } } }

变换:

{
  "$schema": "http://datafactories.schema.management.azure.com/vsschemas/V1/Microsoft.DataFactory.Config.json",
  "AzureStorage": [
    {
      "name": "$.properties.typeProperties.connectionString",
      "value": "DefaultEndpointsProtocol=https;AccountName=mytestaccount;AccountKey=d;lasfjdalfdjfldjfdsfds;EndpointSuffix=core.windows.net"
    }
  ],
  "DataLakeStore": [
    {
      "name": "$.properties.typeProperties.dataLakeStoreUri",
      "value": "https://mydatalake.azuredatalakestore.net/webhdfs/v1"
    }
  ]
}

我需要做的是加载转换文件,然后遍历它,找到我需要转换的输入文件的名称(在本例中为 AzureStorage.jsonDataLakeStore.json (。

接下来,我需要相应地替换属性。 我正在尝试通过使用 ConvertFrom-Json 将转换文件加载到变量中来做到这一点,但我不确定之后如何遍历它。

我不知道你到底需要什么帽子。 我猜可以访问 JSON 文件中的信息。

这种方法呢?

$json_object = Get-Content -Raw -Path '<your_path>transform.json' | ConvertFrom-Json
$azure_storage = @('AzureStorage'; 'DataLakeStore')
ForEach ($azure in $json_object) {
    ForEach ($storage in $azure_storage) {
        Write-Output $azure.$storage.name
        Write-Output $azure.$storage.value
    }
}
编辑

由于编辑我得到了它。 您需要通用访问权限。

给你:

$json_object = (Get-Content -Path '<your_path>transform.json') -join "`n"  | ConvertFrom-Json
ForEach ($object in $json_object.PsObject.Properties) {
    Write-Output $object.name
    Write-Output $object.value
}

解释: (Get-Content -Path '<your_path>transform.json') -join " n"' 是Microsoft的 MSDN 推荐的读取 JSON 文件的方法。

您需要找出值的位置。 您正在使用的对象是"Windows PowerShell 自定义对象" - PsObject。 要访问 您需要使用 .Properties.value . 然后你有你想要的字符串,你可以使用 .name.value .

相关内容

  • 没有找到相关文章

最新更新