【发布时间】:2018-04-14 06:00:06
【问题描述】:
我正在尝试通过引用传递 JSON,然后向其中添加一些内容。例如,我想得到相同的东西:
$json.commontokens.search.tokens.token += $newItem
我将$json 后面的键保留在$jsonList 的字符串列表中(因为键未知并且可以更改)以构建$json.commontokens.search.tokens.token:
$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”,并在其中引用“adder”。它应该会给你一些关于不知道你在引用什么的错误。
-
当您将参数传递给接受对象引用的函数时,您需要在调用中包含该引用,即
adder -j ([ref]$Json) -stringList $List。无需返回$j,您需要操作$j.Value(同时,传递一个有效的对象开始) -
澄清:
return $j.Value、$j.Value += $first和$jpath += $newItem在您的示例中应该可以解决这个问题。 -
[ref]"magic" 仅适用于变量。[ref]$j.value.$first将引用值的副本。
标签: json powershell pass-by-reference