Description
Component(s)
pkg/ottl
Is your feature request related to a problem? Please describe.
The flatten()
function is not able to flatten a map, which has conflicting keys after flattening. In the current state, the latest processed key in the map takes precedence. An example is
{
"name": "test",
"address": {
"street": "first",
"house": 1234
},
"address.street": 2
}
which will result in
{
"name": "test",
"address.street": 2,
"address.house": 1234,
}
and therefore we have data loss
Describe the solution you'd like
I would like to introduce another optional parameter of type boolean
, which will enable/disable the resolution of conflicts by adding a suffix for the conflicting keys, similar to how flatten()
handles slices. The definition might look like this
flatten(target, Optional[prefix], Optional[depth], Optional[resolve_conflict])
Where the 3rd parameter is type boolean
and if set to false
the behavior stays as it is. If set to true
, it will keep all the conflicting keys and use a suffix to distinguish them. A solution for the mentioned example would be
{
"name": "test",
"address.street.00": "first",
"address.house": 1234,
"address.street.01": 2,
}
We can use a prefix 0
to the suffix to distinguish the array conversions and map key conflict resolutions
Describe alternatives you've considered
No response
Additional context
No response