下面是一个JSON格式的文件:ConvertTo-JSON
之前:
[
{
"Yura": {
"Cashier": {
"branch": "release/Retail-v4.0",
"configuration": "RetailDemo Debug",
"datetime_deployed": "Apr 18 2018 07:45:05",
"deployed_by": "anonymous",
"host": "cashier2-retail4.testing.aws.com",
"job": "http://jenkins-testing.aws.com:8080/job/CashierDeployment",
"lineserver": "",
"messagebus": "",
"product": "Cashier",
"publish_profile": "cashier2.retail.dev.pubxml"
},
"ContentManager": {
"branch": "release/Retail-v3.31.1",
"configuration": "RetailDemo Debug",
"datetime_deployed": "Jan 17 2018 11:59:24",
"deployed_by": "anonymous",
"host": "contentmanager2-retail3.testing.aws.com",
"job": "http://jenkins-testing.aws.com:8080/job/ContentManagerDeployment",
"lineserver": "",
"messagebus": "",
"product": "ContentManager",
"publish_profile": "..\\ContentManager.PublishProfiles\\contentmanager2.retail5.dev.pubxml"
}
}
}
]
字符串
在使用此代码处理数据之后:
$json = Get-Content 'D:\script\test.json' -encoding utf8 | ConvertFrom-Json
$json.yura.ContentManager.branch = 'test'
型
我将JSON保存到另一个文件中:
$json | convertto-json | set-content "D:\script\test1.json" -encoding utf8
型
问题是,保存文件后,格式变得破碎:
{
"Yura": {
"Cashier": {
"branch": "release/Retail-v4.0",
"configuration": "RetailDemo Debug",
"datetime_deployed": "Apr 18 2018 07:45:05",
"deployed_by": "anonymous",
"host": "cashier2-retail4.testing.aws.com",
"job": "http://jenkins-testing.aws.com:8080/job/CashierDeployment",
"lineserver": "",
"messagebus": "",
"product": "Cashier",
"publish_profile": "cashier2.retail.dev.pubxml"
},
"ContentManager": {
"branch": "test",
"configuration": "RetailDemo Debug",
"datetime_deployed": "Jan 17 2018 11:59:24",
"deployed_by": "anonymous",
"host": "contentmanager2-retail3.testing.aws.com",
"job": "http://jenkins-testing.aws.com:8080/job/ContentManagerDeployment",
"lineserver": "",
"messagebus": "",
"product": "ContentManager",
"publish_profile": "..\\ContentManager.PublishProfiles\\contentmanager2.retail5.dev.pubxml"
}
}
}
型
我的问题是-如何在PowerShell中保留源代码格式?
6条答案
按热度按时间gwbalxhn1#
由于您的原始json包含一个只有一个元素的数组,因此PowerShell会将其压缩为这一个元素。如果您希望在输出中再次将其作为数组,请使用rokumaru's good answer。
然而,PowerShell的
ConvertTo-Json
并不能生成格式很好的json,为此,我在前一段时间写了一个帮助函数:已编辑
新版本(感谢Widlov)
字符串
像这样使用它:
型
gdx19jrr2#
我发现Theo's excellent answer导致空[]或{}或行内数组的缩进错误。
输入示例:
字符串
将导致:
型
写了一个修复程序,以确保当行包含[/{ AND ]/}时缩进正确:
型
mum43rcc3#
如果整体是一个数组,而元素是一个单独的json文件,那就很尴尬了。
如果使用管道,则不会将其视为数组。
字符串
因为它不是一个普通的数组,所以仅仅把它作为参数传递是行不通的。
型
如果您重新创建阵列,它会工作得很好。
型
ulydmbyx4#
如果您可以选择使用较新的PowerShell Core,则格式现在已修复。
4urapxun5#
我写了下一个函数来修复缩进
字符串
ryevplcw6#
更新了the answer from Theo,使其要求JSON输入,因为我只是想美化JSON数据。此外,删除了数学方法调用,因为我不能在我想要使用它的地方使用方法调用。
太感谢你了!
字符串