目標:在 Json 中的字串陣列中從“some”更改為“that”
杰森:
{
"resources": [
{
"name": "item1",
"dependsOn": [
"somevalue",
"somevalue"
]
},
{
"name": "item2",
"dependsOn": [
"somemorevalue",
"someothervalue"
]
},
{
"name": "item3",
"dependsOn": [
"somemorevalue",
"someothervalue"
]
}
]
}
PowerShell代碼:
$t = Get-Content -path "data.json" -Raw | ConvertFrom-Json
$t.resources | ForEach-Object {
$_ = $_.dependsOn | ForEach-Object {
$_ = $_ -replace "some", "that"
}
}
$t.resources
OutPut:運行代碼后我得到以下輸出。你能幫我這里缺少什么嗎?
name dependsOn
---- ---------
item1 {somevalue, somevalue}
item2 {somemorevalue, someothervalue}
item3 {somemorevalue, someothervalue}
uj5u.com熱心網友回復:
您永遠不會將任何東西分配給該dependsOn屬性,因此缺乏持久性。
將第二個陳述句更改為:
$t.resources | ForEach-Object {
$_.dependsOn = @($_.dependsOn -replace "some", "that")
}
請注意,-replace可以應用于多個輸入字串,因此ForEach-Object不需要內部陳述句。
uj5u.com熱心網友回復:
您可以在 Powershell 的 foreach-loop 中替換值,但為此您需要修改欄位$_而不是直接將值分配給$_. 因此,為了替換您的東西,您需要通過首先回傳更改的字串,然后將回傳的陣列或物件分配給更大結構的確切部分dependsOn來重新創建部分或整個物件。$t像這樣:
$t.resources | ForEach-Object {
$_.dependsOn = $_.dependsOn | ForEach-Object {
$_ -replace "some", "that"
}
}
$t.resources
在這里,首先您在嵌套物件的陣列上呼叫 foreach 回圈dependsOn,但不是分配值,而是將其作為未傳遞給任何分配的項回傳,而是在回圈之外形成 foreach 塊的陣列輸出。然后,您將更改后的輸出分配給已處理物件的field,而不是修改您取消參考它的臨時變數$_,從而獲得對正在處理的確切物件的訪問權限,并且能夠dependsOn用更改后的資料替換陣列的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/426805.html
