JSONを参照渡ししてから、何かを追加しようとしています。参照渡しのpowershell
:(キーは未知であり、変更することができますので)私は$json.commontokens.search.tokens.token
を構築するために
$jsonList
内の文字列のリストで
$json
を次のキーを保つ
$json.commontokens.search.tokens.token += $newItem
:たとえば、私は同じことを取得したいです
$jPath = $json
foreach($item in $jsonList){
$jPath = $jPath.$item
}
この結果、$jpath += $newItem
は$json
に変更されません(しかし、$jpath
の場合は機能します)。だから私は変更を維持するために参照することによって渡す必要があると思った。
function adder{
param(
[ref]$j
$stringList
)
if ($stringList -ne $null) {
$first = $stringList.first.value
$stringList.removefirst()
adder ([ref]$j.value.$first) $stringList
} else {
return $j
}
}
$jpath = adder ([ref]$json) $jsonList
$jpath.value += $newItem
のようなものはやはり、これは$jpath
のために動作しますが、何も$json
に起こりません。 $jpath.value[70]
を試しても、期待通りの回答が得られますが、$json[70]
は存在しません。実際には、私は関数なしで試しました:
$jpath = [ref]$json.commontokens.search.tokens.token
$jpath.value += $newItem
しかし、それでも動作しません。私は間違った参照をしていますか?それとも、キーと関係がありますか?
あなたの機能と関係があるかもしれません。私は関数 "加算器"を作成していて、その内部に "加算器"を参照しているのが分かります。それは、あなたが参照しているものが分からないということについて何らかのエラーを与えるはずです。 –
オブジェクト参照を受け取る関数に引数を渡すときは、その呼び出しに参照を含める必要があります。つまり、 'adder -j([ref] $ Json)-stringList $ List'です。 '$ j.Value'を操作する必要があります(また、有効なオブジェクトを渡してください) – TheIncorrigible1
明確化:' return $ j.Value'、 '$ j.Value + =あなたの例では$ first'と '$ jpath + = $ newItem'はこれをクリアします。 – TheIncorrigible1