declare function libjn:descendant-objects($sequence as item()*) as object()* { for $item in $sequence return typeswitch ($item) case object() return ( $item, libjn:descendant-objects(libjn:values($item)) ) case array() return libjn:descendant-objects($item()) default return () };
libjn:descendant-objects( ( { "foo" : { "bar" : [ 1, 2 ] } }, [ [ { "foo" : "bar", "bar" : "foo" } ] ], true(), 1, jn:null() ) )
{ "foo" : { "bar" : [ 1, 2 ] } } { "bar" : [ 1, 2 ] } { "foo" : "bar", "bar" : "foo" }