Skip to content

Commit 96b724d

Browse files
flatten fix for empty array
1 parent b7f8aff commit 96b724d

File tree

1 file changed

+25
-13
lines changed

1 file changed

+25
-13
lines changed

src/utils/json/flatten.rs

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -276,19 +276,31 @@ pub fn generic_flattening(value: &Value) -> Result<Vec<Value>, JsonFlattenError>
276276
let results = map
277277
.iter()
278278
.fold(vec![Map::new()], |results, (key, val)| match val {
279-
Value::Array(arr) => arr
280-
.iter()
281-
.flat_map(|flatten_item| {
282-
generic_flattening(flatten_item).unwrap_or_default()
283-
})
284-
.flat_map(|flattened_item| {
285-
results.iter().map(move |result| {
286-
let mut new_obj = result.clone();
287-
new_obj.insert(key.clone(), flattened_item.clone());
288-
new_obj
289-
})
290-
})
291-
.collect(),
279+
Value::Array(arr) => {
280+
if arr.is_empty() {
281+
// Insert empty array for this key in all current results
282+
results
283+
.into_iter()
284+
.map(|mut result| {
285+
result.insert(key.clone(), Value::Array(vec![]));
286+
result
287+
})
288+
.collect()
289+
} else {
290+
arr.iter()
291+
.flat_map(|flatten_item| {
292+
generic_flattening(flatten_item).unwrap_or_default()
293+
})
294+
.flat_map(|flattened_item| {
295+
results.iter().map(move |result| {
296+
let mut new_obj = result.clone();
297+
new_obj.insert(key.clone(), flattened_item.clone());
298+
new_obj
299+
})
300+
})
301+
.collect()
302+
}
303+
}
292304
Value::Object(_) => generic_flattening(val)
293305
.unwrap_or_default()
294306
.iter()

0 commit comments

Comments
 (0)