使用Powershell为JSON添加新的键值对

时间:2018-11-13 16:09:21

标签: json powershell arm-template

我正在创建一个手臂模板以在ADF中部署数据集,为此,我需要根据输入文件使用新的键值对更新现有的json文件。我如何使用Powershell将新的键值对添加到json文件。 对此真的有任何帮助。

如果使用的是“ Add-Member”,它将使用以下结构中的所有属性使用新的“键”和“值”进行更新。但是我希望在显示另一个值对之后添加新的键和值在下面的代码中突出显示为“需要添加”

B::init()

我的代码应该看起来像这样。.“需要添加”是我打算为每个循环添加一个键值对,只要我有来自另一个文本文件的输入即可。

A::init(bool)

1 个答案:

答案 0 :(得分:4)

您不需要Add-Member,只需要“追加”到.properties.structure中的现有数组即可(从技术上讲,您正在创建一个包含新元素的新数组)。

这是一个简化的示例:

# Sample JSON.
$json = @'
{
    "name": "[concat(parameters('factoryName'), '/Veh_Obj')]",
    "properties": {
        "type": "AzureDataLakeStoreFile",
        "structure": [
            {
                "name": "VIN",
                "type": "String"
            },
            {
                "name": "MAKE",
                "type": "String"
            }
        ],
    }
}
'@

# Convert from JSON to a nested custom object.
$obj = $json | ConvertFrom-Json

# Append new objects to the array.
$obj.properties.structure += [pscustomobject] @{ name = 'newname1' },
                             [pscustomobject] @{ name = 'newname2' }

# Convert back to JSON.
$obj | ConvertTo-Json -Depth 3

上面的结果:

{
  "name": "[concat(parameters('factoryName'), '/Veh_Obj')]",
  "properties": {
    "type": "AzureDataLakeStoreFile",
    "structure": [
      {
        "name": "VIN",
        "type": "String"
      },
      {
        "name": "MAKE",
        "type": "String"
      },
      {
        "name": "newname1"
      },
      {
        "name": "newname2"
      }
    ]
  }
}