XQuery: Array von Karten erstellen
Ich verstehe nicht, wie man in Xquery ein Array von Karten dynamisch erstellt, das am Ende als JSON serialisiert werden soll:
Ich kann so ein einfaches/statisches Array von Karten erstellen
let $array := [map{"id": "4711"}, map{"id": "4712"}]
Ich kann eine weitere Karte wie diese hinzufügen:
let $array := array:append($array, map {"id": "4713"})
mit folgendem
return
serialize($array,
<output:serialization-parameters>
<output:method>json</output:method>
</output:serialization-parameters>)
Ergebnisse, [{"id":"4711"},{"id":"4712"},{"id":"4713"}]
die für mich perfektes JSON ist.
Aber ich habe eine beliebige Anzahl von Karten, die ich diesem Array basierend auf einer Sequenz hinzufügen kann, wie folgt:
let $mylist := ("4714", "4715")
Als Ergebnis hätte ich gerne folgendes:
[{"id":"4711"},{"id":"4712"},{"id":"4713"},{"id":"4714"},{"id":"475"}]
Dies versuche ich zu erreichen durch:
let $array := array:append($array,
for $n in $mylist
return map {"id": $n}
)
Aber das gibt als Ergebnis zurück:
[{"id":"4711"},{"id":"4712"},{"id":"4713"},[{"id":"4714"},{"id":"4715"}]]
Die for-Schleife erstellt also offensichtlich ein weiteres Array und hängt dieses an das vorhandene an. Wie vermeide ich das?
Ich denke, folgendes sollte es tun:
let $mylist := ("4714", "4715")
return array{ $mylist ! map{'id': .} }
Es ist meiner Meinung nach ein bisschen bedauerlich, dass array{}
es sich um eine spezielle Syntax handelt und nicht nur um eine Funktion.
Du kannst es auch mit
array:join( $mylist ! [map{'id': .}] )