xquery - XQuery:创建地图数组
问题描述
我不明白如何在 Xquery 中动态创建一个映射数组,最终应该序列化为 JSON:
我可以像这样创建一个简单/静态的地图数组
let $array := [map{"id": "4711"}, map{"id": "4712"}]
我可以像这样添加另一张地图:
let $array := array:append($array, map {"id": "4713"})
使用以下
return
serialize($array,
<output:serialization-parameters>
<output:method>json</output:method>
</output:serialization-parameters>)
结果[{"id":"4711"},{"id":"4712"},{"id":"4713"}]
这对我来说是完美的 JSON。
但是我有任意数量的地图要根据一个序列添加到这个数组中,如下所示:
let $mylist := ("4714", "4715")
我想要的结果是:
[{"id":"4711"},{"id":"4712"},{"id":"4713"},{"id":"4714"},{"id":"475"}]
我试图通过以下方式实现这一目标:
let $array := array:append($array,
for $n in $mylist
return map {"id": $n}
)
但这会作为结果返回:
[{"id":"4711"},{"id":"4712"},{"id":"4713"},[{"id":"4714"},{"id":"4715"}]]
因此,显然 for 循环会创建另一个数组并将其附加到现有数组中。我该如何避免呢?
解决方案
我认为以下应该做到这一点:
let $mylist := ("4714", "4715")
return array{ $mylist ! map{'id': .} }
array{}
在我看来,这是一种特殊用途的语法,而不仅仅是一个函数,这有点不幸。
你也可以这样做
array:join( $mylist ! [map{'id': .}] )
推荐阅读
- python - 如何在 mongodb 中查找包含 NaN 值的字段的 $avg 和 $sum?
- javascript - NPM 中的 --openssl-legacy-provider 是什么?
- java - 为什么这个异常在我的服务器上运行 Spring Boot\Batch 应用程序?java.lang.OutOfMemoryError:无法创建本机线程:
- swift - Swift Async 让带循环
- python - 如何实时读取过程输出
- postgresql - 错误:“DELIMITER”第 1 行或附近的语法错误:DELIMITER //
- php - 为什么我会在 Docker 容器之间遇到 CORS 问题
- vhdl - Vivado - VHDL 问题:ieee.fixed_pkg.all
- kotlin - 如何在 Kotlin 数据类(房间实体)中给出保留关键字的列名?
- python - 在 2D 空间中查找点周围的点