我有一個 json 檔案,我試圖在其中設定節點之一的值:
primaryContact : {
loginName : null
}
沒有詳細說明,我將這個值的路徑存盤在 value 中$name。例如:
$name = primaryContact.loginName
在$name作為陳述句的一部分參考時如何更改此值?我已經正確轉換了 json。
這有效:
jsonFile.primaryContact.loginName = "some value"
我需要做這樣的事情:
jsonFile.$name = "some value"
如果我嘗試最后一條陳述句,則會收到此錯誤:
“在此物件上找不到屬性 'primaryContact.loginName'。請驗證該屬性是否存在并且可以設定。”
uj5u.com熱心網友回復:
$jsonFile.$name不會作業,因為 PowerShell 將嘗試決議名為primaryContact.loginName而不是 firstprimaryContact和 then的單個屬性loginName。
您需要單獨取消參考每個成員級別 - 首先primaryContact從根物件獲取 的值,然后分配給loginName結果物件上的屬性:
function Set-ByPath
{
param(
$RootObject,
[string]$Path,
$NewValue
)
# split path into individual member names
$pathParts = $Path.Split('.')
# we'll use this variable to keep track of the last member we resolved
$object = $RootObject
for($i = 0; $i -lt $pathParts.Length; $i ){
$memberName = $pathParts[$i]
if($i -eq $pathParts.Length - 1){
# last part of the member chain, assign value and return
$object.$memberName = $newValue
return
}
# we haven't yet reach the last member, continue to get the next property in the chain
$object = $object.$memberName
}
}
現在你可以這樣做:
$name = 'primaryContact.loginName'
$data = '{"primaryContact" : { "loginName" : null }}' |ConvertFrom-Json
Set-ByPath -RootObject $data -Path $name -NewValue "new login name goes here"
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/370393.html
標籤:电源外壳
