如何使用 PowerShell 更新 JSON 文件

Posted

技术标签:

【中文标题】如何使用 PowerShell 更新 JSON 文件【英文标题】:How do I update JSON file using PowerShell 【发布时间】:2016-06-22 06:34:55 【问题描述】:

我有一个 json 文件 mytest.json 如下所示,我想使用 PowerShell script 更新值

更新.json


    "update": [
        
            "Name": "test1",        
            "Version": "2.1"
        ,
        
            "Name": "test2",        
            "Version": "2.1"
           
    ]

我想写一个 PowerShell 脚本,其中if Name=="test1" I want to update Version= "3" 我如何使用参数来做到这一点?

【问题讨论】:

【参考方案1】:

这是一种方法:

$a = Get-Content 'D:\temp\mytest.json' -raw | ConvertFrom-Json
$a.update | % if($_.name -eq 'test1')$_.version=3.0
$a | ConvertTo-Json -depth 32| set-content 'D:\temp\mytestBis.json'

根据@FLGMwt 和@mikemaccana,我用-depth 32 改进了ConvertTo-Json,因为默认深度值是2,对于深度大于2 的对象,尽管有对象,您仍会收到类信息。

【讨论】:

请注意 ConvertTo-Json 的默认深度为 2。深度 json 将获得 ToString'd 这可能不是您想要的。如果您有更多的嵌套 json,请使用 Depth 参数:ConvertTo-Json -Depth 20 depth 问题的参考:docs.microsoft.com/en-us/powershell/module/… @mikemaccana 感谢depth 的调整,但 1000 有点重要。我还添加了一个小解释。【参考方案2】:

我也遇到过同样的问题。我正在寻找更改以下 JSON 文件的记录


"SQS_QUEUE_URL":  "https://que-url.com/server1",
"SQS_EVENTS_QUEUE_URL":  "https://events-server.com/server1/development_events",
"REGION":  "region1",
"BUCKET":  "test-bucket",
"AE_WORK_PATH":  "C:\\workpath\\path1",
"ENV":  "env"


最后,我设法找到了从 Powershell 生成 JSON 文件的最简单方法。

$json = Get-Content "c:\users\bharat.gadade\desktop\test.json" | ConvertFrom-Json 
$json.SQS_QUEUE_URL = "https://que-url.com/server2"
$json.SQS_EVENTS_QUEUE_URL = "https://events-server.com/Server2/development_events"
$json.REGION = "region1 "
$json.BUCKET = "test-bucket"
$json.AE_WORK_PATH = "C:\workpath\path1"
$json.ENV = "env"
$json | ConvertTo-Json | Out-File "c:\users\bharat.gadade\desktop\test.json"

【讨论】:

要补充一点,对于分层的 json 数据,您可以使用句点运算符引用标题下方的标签。所以如果你的 Json 是这样的: "Settings": "AWS_REGION": "us-east-1" 你可以使用: $json.Settings.AWS_REGION 来设置或读取条目!

以上是关于如何使用 PowerShell 更新 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在powershell中迭代json对象

如何使用Powershell更新Service Fabric应用程序参数

如何从 package.json“脚本”执行 powershell ps1 脚本?

无法使用 Powershell 2.0 压缩文件

如何使用powershell从svn服务器自动更新

PowerShell - 使用排序的对象数组打印 JSON 输出?