declare function libjn:descendant-pairs($sequence as item()*)
{
for $item in $sequence
return typeswitch ($item)
case object() return
for $key in jn:keys($item)
let $value := $item($key)
return (
{ $key : $value },
libjn:descendant-pairs($value)
)
case array() return
libjn:descendant-pairs($item())
default return ()
};
libjn:descendant-pairs(
(
{ "foo" : { "bar" : [ 1, 2 ] } },
[ [ { "foo" : "bar", "bar" : "foo" } ] ],
true(),
1,
jn:null()
)
)
{ "foo" : { "bar" : [ 1, 2 ] } }
{ "bar" : [ 1, 2 ] }
{ "foo" : "bar" }
{ "bar" : "foo" }
libjn:descendant-pairs({
"first" : 1,
"second" : {
"first" : "a",
"second" : "b"
}
})("first")
1 a