使用PowerShell将键值对添加到JSON文件

时间:2020-01-08 22:12:53

标签: json powershell parsing

我有一个像这样的json,我想为文件中的每一行添加一个line key:value。

例如,在大括号前添加逗号和值KC-NA-asplan-PROJECTS-DEV-01。

 [
     {
       "name": "/subscriptions/uifaghy78923/resourceGroups/KC-NA-RSGP-PROJECTS-DEV-01/providers/Microsoft.Web/serverfarms/KC-NA-asplan-PROJECTS-DEV-01"
     },
     {
       "name": "/subscriptions/uifaghy78923/resourceGroups/KC-NA-RSGP-PROJECTS-DEV-01/providers/Microsoft.Web/serverfarms/KC-NA-asplan-PROJECTS-DEV-02"
     }
    ]

$file="pathtojson"

$jsonContent = Get-Content $file | ConvertFrom-Json;


$appserviceplan= $jsonContent.name;

foreach ($app in $appserviceplan) {
$app.Split('/')[8]
}

我想在每行中添加对应的$ app.Split('/')[8]以便

     "name": "/subscriptions/uifaghy78923/resourceGroups/KC-NA-RSGP-PROJECTS-DEV-01/providers/Microsoft.Web/serverfarms/KC-NA-asplan-PROJECTS-DEV-01", "value": "KC-NA-asplan-PROJECTS-DEV-01"
 },

2 个答案:

答案 0 :(得分:0)

使用ConvertTo-Json应该适合您:

(Get-Content $file | ConvertFrom-Json) | 
    Select-Object -Property *, @{name ="value"; expression={($_.name -split '/')[8]}} | 
    ConvertTo-Json |
    Out-File -FilePath .\newdata.json

这将获取每个对象的所有现有属性(最初仅为name),并添加一个名为value且值为($_.name -split '/')[8]的新属性。

然后使用ConvertTo-Json将结果对象转换回JSON,对于您的示例数据,其结果为:

[
    {
        "name":  "/subscriptions/uifaghy78923/resourceGroups/KC-NA-RSGP-PROJECTS-DEV-01/providers/Microsoft.Web/serverfarms/KC-NA-asplan-PROJECTS-DEV-01",
        "value":  "KC-NA-asplan-PROJECTS-DEV-01"
    },
    {
        "name":  "/subscriptions/uifaghy78923/resourceGroups/KC-NA-RSGP-PROJECTS-DEV-01/providers/Microsoft.Web/serverfarms/KC-NA-asplan-PROJECTS-DEV-02",
        "value":  "KC-NA-asplan-PROJECTS-DEV-02"
    }
]

还请注意,如本excellent SO answer所述,可能需要将(Get-Content $file | ConvertFrom-Json)用括号括起来。

答案 1 :(得分:0)

由于您的Json是对象数组,所以我认为最明显的方法是遍历此对象列表,并为每个对象输出一个包含value属性的新对象。最简单的方法是使用Select-Object

类似这样的东西:

$file = "D:\blah.json"
$json = Get-Content $file -Raw | ConvertFrom-Json | ForEach-Object {
    $_ | Select-Object name, @{Name = 'value'; Expression = {($_.name -split '/')[8]}}
} | ConvertTo-Json

$json

结果:

[
    {
        "name":  "/subscriptions/uifaghy78923/resourceGroups/KC-NA-RSGP-PROJECTS-DEV-01/providers/Microsoft.Web/serverfarms/KC-NA-asplan-PROJECTS-DEV-01",
        "value":  "KC-NA-asplan-PROJECTS-DEV-01"
    },
    {
        "name":  "/subscriptions/uifaghy78923/resourceGroups/KC-NA-RSGP-PROJECTS-DEV-01/providers/Microsoft.Web/serverfarms/KC-NA-asplan-PROJECTS-DEV-02",
        "value":  "KC-NA-asplan-PROJECTS-DEV-02"
    }
]
相关问题