通过json自定义对象进行迭代

时间:2018-03-23 09:20:45

标签: json powershell azure-data-factory

我尝试使用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将转换文件加载到变量中来实现,但我不确定如何在之后遍历它。

1 个答案:

答案 0 :(得分:1)

我完全不知道你需要的帽子。我猜测访问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.value) {
    Write-Output $object.name
    Write-Output $object.value
}

说明: (Get-Content -Path '<your_path>\transform.json') -join " n“`是一种Microsoft's MSDN推荐的读取json文件的方法。

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