我想在MarkLogic中调用XQuery脚本中的一些现有代码,这些代码将JSON作为函数参数。
根据我自己代码的输入,我需要向另一个函数提供JSON的变体,以便它包含或不包含额外的属性。
到目前为止,我只想到了用代码重复来实现这一点:
let $json :=
if (fn:exists($extraAttribute)) then
object-node {
"query": array-node { $id },
"extra": $extraAttribute
}
else
object-node {
"query": array-node { $id }
}
有没有更好的方法来解决这个问题?"extra"
的值不同,被调用代码的行为也不同。到目前为止,我尝试了一个空序列()
,一个空字符串""
和null-node {}
作为替代值。
UPDATE:被调用的代码如下计算JSON输入:
let $extraStuff := $json/extra/fn:string()
我不想改变调用的代码,因为我不是唯一的调用者,我不知道其他人是否依赖于这种行为。
2条答案
按热度按时间mu0hgdu01#
备选方案2:
对
object-node
使用+运算符我无法在没有错误的情况下内联
$extra
,所以我必须这样拆分它。UPDATE:
object-node()
的+
操作符返回了一个json:object
,它不能被计算为$json/extra/fn:string()
,所以我必须将转换添加回一个具有xdmp:to-json
的对象节点。o2g1uqev2#
备选方案1:
使用json函数
我需要在最后使用
! object-node()
,因为被调用的函数需要一个object-node
,但是json:transform-to-json
生成了一个文档节点,其中包含一个对象节点。