如何使用 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更新Service Fabric应用程序参数