【问题标题】:How do I update JSON file using PowerShell如何使用 PowerShell 更新 JSON 文件
【发布时间】: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" 我如何使用参数来做到这一点?

【问题讨论】:

    标签: json powershell powershell-3.0


    【解决方案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
    • @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 来设置或读取条目!
    猜你喜欢
    • 2016-09-29
    • 2018-11-11
    • 2020-10-16
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2022-08-19
    • 2019-09-12
    • 1970-01-01
    相关资源
    最近更新 更多