【发布时间】:2019-03-16 23:48:06
【问题描述】:
我很难在 powershell 中读取 JSON 文件、替换值并写回文件或文件。
鉴于以下情况:
[Object]$QuickJson = @'
{
"swagger": "1.0",
"info": {
"version": "0.0.1",
"title": "this is a title",
"description": "this is a description"
},
"basePath": "/test",
"paths" : {
"/GetSomething": {
"get": {
"name" : "test01"
}
},
"/GetSomethingElse" : {
"get": {
"name" : "test02"
}
},
"/GetAnotherThing": {
"get": {
"name" : "test03"
}
}
}
}
'@
我在这里感兴趣的是用其他东西替换“路径”对象中的值。我读取了文件并且可以使用我正在尝试的方法访问该对象:
[object]$MyPSJson = ConvertFrom-Json -InputObject $QuickJson
foreach($info in $MyPSJson.paths.PSObject.Properties)
{
$path = $info.Name
Write-Host "path: $path"
$info.Name = "$path?code=fsfsfsfsfsfdfds"
Write-Host $info.Name
}
我不知道那些“路径”会是什么,我需要获取现有值并向其附加一个代码值,因此我需要能够遍历所有路径并进行替换。当我尝试上述方法时,出现错误:
路径:/GetSomething --“名称”是只读属性。在 C:\scripts\test.ps1:44 char:5 + $info.Name = "$path?code=fsfsfsfsfsfdfds" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyAssignmentException
我已经尝试了几种不同的方法,但还没有提出一个好的或可行的解决方案。非常感谢任何帮助或指出正确的方向。
【问题讨论】:
-
你只是改变路径名吗?
-
Name字段的类型为System.Management.Automation.PSNoteProperty,它是只读的。您需要向paths孩子添加额外的成员。 -
@ArcSet 是的,我只需要更改路径名
-
@TheIncorrigible1 是的,这就是我遇到的问题,这就是为什么我相信/知道这不是正确的方法,可能应该以其他方式来做,只是不知道该怎么做
-
要做你想做的事,我怀疑你需要将对象转换为哈希表,然后替换/转换回 json。
标签: json powershell