I created SetValue
and GetValue
functions to let you get and set a nested property of an object (including a json object) dynamically by name and they work perfectly!
They are recursive functions which resolve the complex property and get the nested property step by step by splitting the nested property name.
GetValue and SetValue of Nested properties by Name
# Functions
function GetValue($object, $key)
{
$p1,$p2 = $key.Split(".")
if($p2) { return GetValue -object $object.$p1 -key $p2 }
else { return $object.$p1 }
}
function SetValue($object, $key, $Value)
{
$p1,$p2 = $key.Split(".")
if($p2) { SetValue -object $object.$p1 -key $p2 -Value $Value }
else { $object.$p1 = $Value }
}
Example
In the following example, I set B.C
dynamically using SetValue
and get its value by name using the GetValue
function:
# Example
$Obj = ConvertFrom-Json '{ "A": "x", "B": {"C": "y"} }'
# Or simply create the object:
# $Obj = @{ A = "x"; B = @{C = "y"} }
$Key = "B.C"
$Value = "Changed Dynamically!"
SetValue -object $Obj -key $Key -Value $Value
GetValue -object $Obj -key $Key