я работал на что-то сегодня и во время тестирования я заметил очень специфический вопросСвой вопрос с Powershell Hashtable и массив
$arry = @()
$Msg = @{Body="This is a Sample Message";}
[email protected]{}
$Msg.BrokerProperties.Label= "Msg1"
$arry += $Msg
$arry | ConvertTo-Json # 1st Result
[email protected]{}
$Msg.BrokerProperties.Label= "Msg2"
$arry += $Msg
$arry | ConvertTo-Json
1-й результат $arry | ConvertTo-Json
как ниже
{ «Body «: "Это образец сообщения", "BrokerProperties": { "Этикетка": "msg1" }}
2-й результат $arry | ConvertTo-Json
как ниже
[ { "Body": "Это пример сообщения", "BrokerProperties": { "Этикетка": "msg2" } }, { "Body": "Это образец сообщения", "BrokerProperties": { "Этикетка": "msg2" } }]
То, что я думал, это когда я установил $Msg.BrokerProperties.Label= "Msg2"
для второго раза, тогда это произвело бы только 2-ая хэш-таблица в массиве. но очень интересно, что собственность вводится даже на 1-ю хэш-таблицу.
Может кто-нибудь объяснить это поведение?
Я фактически делал это в цикле для подготовки полезной нагрузки JSON для отправки на API вызов, поэтому я lookign способа обновить метки для каждого внутреннего внутри объекта JSon
Изменяет ли переменная операцию добавления массива на $ arry + =, $ Msg? – arco444
Нет, теперь я начинаю понимать, что массивы являются ссылочными типами (а не типами значений) –
Когда я пытаюсь выполнить строчную строчку ниже, свойство Label уже находится в $ msg, когда я вывожу его $ arry = @() $ Msg = @ {Body = "Это примерное сообщение"; BrokerProperties = @ {Priority = "Medium"}} $ Msg1 = $ Msg $ Prp = $ Msg1.Get_Item ("BrokerProperties") $ Prp.Add ("Ярлык" , "Msg1") $ arry + = $ Msg1 $ Msg2 = $ Msg $ Msg2 | ConvertTo-Json –