Flatten nested objects
This article provides information on the flatten library, which is used to convert a nested object into an object that is not nested.
How it works
The flatten library is a standard library that is imported in the default code for a data transformation function. This library provides the flatten() utility, which converts a nested object into an object that is not nested. flatten() returns an object that contains strings and arrays of strings.
flatten() accepts two parameters, as follows:
flatten(target[, options])
targetis the event object passed to the data transformation function.optionsis an object that specifies how nested keys are handled during the conversion.
The options parameter contains the following properties:
| Property | Data Type | Description |
|---|---|---|
delimiter |
String |
The character used to combine parent and child property names. The default is .. |
prefix |
String |
The string concatenated at the beginning of the new key name followed by the delimiter. |
ignoreKeys |
String[] |
An array of keys to omit from the output. |
replaceKeys |
Object{string:string} |
Specifies new names for keys, where the key is the existing key in the object and the value is the new key. Example: { "uid" : "user_id" } |
Parameters
The following examples show how the options properties are used. These examples use the following nested object as the target to be flattened:
const object = {
page: {
id: 1
},
user: {
id: 1
},
util: ["1", "2", "3"]
};
delimiter
If delimiter is _, the following object is returned:
{
"page_id": 1,
"user_id": 1,
"util": ["1", "2", "3"]
}
prefix
If prefix is fl, the following object is returned:
{
"fl.user.id": 1,
"fl.page.id": 1,
"fl.util": ["1", "2", "3"]
}
ignoreKeys
If ignoreKeys is ["page", "util"], the following object is returned:
{
"user.id": 1
}
replaceKeys
If replaceKeys is defined as follows:
const replaceKeys = {
"user": "",
"page": "p"
}
The following object is returned:
{
"id": 1,
"p.id": 1,
"util": ["1", "2", "3"]
}
Full example
The following example shows a complex object to be flattened:
import flatten from 'tealium/util/flatten';
const options = {
delimiter: "_",
ignoreKeys: ["array_of_strings"],
replaceKeys: {
"number": "float",
"array_of_objects": "modified_array_of_strings",
"ordinal": ""
},
prefix: "t"
}
const output = flatten({
"boolean": true,
"number": 12.34,
"string": "value",
"date": new Date(1631009413904),
"array_of_strings": ["first", "second"],
"array_of_arrays": [
[1, 2],
[3, 4]
],
"array_of_objects": [{
"ordinal": "first"
}, {
"ordinal": "second"
}],
"object": {
"child_boolean": true,
"child_number": 12.34,
"child_string": "value",
"child_array_of_strings": ["first", "second"],
"child_array_of_arrays": [
[1, 2],
[3, 4]
],
"child_object": {
"gchild_boolean": true,
"gchild_number": 12.34,
"gchild_string": "value",
"gchild_array_of_strings": ["first", "second"],
"gchild_array_of_arrays": [
[1, 2],
[3, 4]
]
}
}
}, options);
The following object is returned by flatten():
{
"t_boolean": "true",
"t_float": "12.34",
"t_string": "value",
"t_date": "2021-09-07T10:10:13.904Z",
"t_array_of_arrays": ["1","2","3","4"],
"t_modified_array_of_strings": ["first","second"],
"t_object_child_boolean": "true",
"t_object_child_number": "12.34",
"t_object_child_string": "value",
"t_object_child_array_of_strings": ["first","second"],
"t_object_child_array_of_arrays": ["1","2","3","4"],
"t_object_child_object_gchild_boolean": "true",
"t_object_child_object_gchild_number": "12.34",
"t_object_child_object_gchild_string": "value",
"t_object_child_object_gchild_array_of_strings": ["first","second"],
"t_object_child_object_gchild_array_of_arrays": ["1","2","3","4"]
}
This page was last updated: August 24, 2023