Unfortunately obtuse solutions don’t make clear problem statements either. From what I could gather you are trying to update the “defaultValue” value (provided it exists) on “key” maps found inside “components”, “rows” or “columns” maps. For my made up sample data this seems to do the same thing.
defmodule Test do
def updateDefaultValues( data_map, default_values ) do
update = fn data, upd ->
case data do
[_|_] ->
Enum.map data, &(upd.(&1,upd))
%{ "key" => name, "defaultValue" => _ } ->
put_in data["defaultValue"], default_values[name]
%{ "components" => components } ->
put_in data["components"], upd.(components,upd)
%{ "columns" => columns } ->
put_in data["columns"], upd.(columns,upd)
%{ "rows" => rows } ->
put_in data["rows"], upd.(rows,upd)
_ ->
data
end
end
update.(data_map,update)
end
end
json =
%{"components" => [
%{"rows" => [
[%{ "columns" => [
[%{ "components" => [
%{"key" => "telenenbedrag", "defaultValue" => "value"},
%{"key" => "looptijd", "defaultValue" => "value"}
]},
%{ "components" => [
%{"key" => "telenenbedrag", "defaultValue" => "value"},
%{"key" => "looptijd", "defaultValue" => "value"}
]}],
[%{ "components" => [
%{"key" => "telenenbedrag", "defaultValue" => "value"},
%{"key" => "looptijd", "defaultValue" => "value"}
]},
%{ "components" => [
%{"key" => "telenenbedrag", "defaultValue" => "value"},
%{"key" => "looptijd", "defaultValue" => "value"}
]}]
]}],
[%{ "columns" => [
[%{ "components" => [
%{"key" => "telenenbedrag", "defaultValue" => "value"},
%{"key" => "looptijd", "defaultValue" => "value"}
]},
%{ "components" => [
%{"key" => "telenenbedrag", "defaultValue" => "value"},
%{"key" => "looptijd", "defaultValue" => "value"}
]}]
]}]
]},
%{"key" => "root", "defaultValue" => "value"},
%{"key" => "flip"},
]}
default_values = %{
"telenenbedrag" => "YtelenenbedragY",
"looptijd" => "XlooptijdX",
"binnenpanel" => "XbinnenpanelX",
"binnencolumn"=> "XbinnencolumnX",
"root" => "XrootX",
"stefan" => "ZstefanZ",
"boris" => "ZborisZ",
"flip" => "ZflipZ"
}
IO.inspect json
IO.inspect Test.updateDefaultValues( json, default_values )