File tree Expand file tree Collapse file tree 1 file changed +25
-13
lines changed Expand file tree Collapse file tree 1 file changed +25
-13
lines changed Original file line number Diff line number Diff 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 ( )
You can’t perform that action at this time.
0 commit comments