我已经阅读了有关使用 XQuery 操作 JSON 文档以及使用 xdmp:insert-xxx 添加节点和向数组添加元素的所有文档,但我正在尝试使用现有数组的值数组创建一个新对象,并且可以好像没明白。
我想将以下对象添加到我的 json 文档的根节点。
{
"A" : [ "B", "C" ]
}
当我尝试时,
xdmp:node-insert-child( $doc/object-node(), object-node{ "ConfiscatedItems" : array-node{ "calculator", "welding iron" } }/ConfiscatedItems )
我收到 XDMP-CHILDDUPNAME 对象节点不能有两个同名的子节点
我的最终目标是说我是否有一个类似的文档;
{
"f": "g",
"h": 1,
"q": [ 1, 2 ]
}
我希望它看起来像;
{
"f": "g",
"h": 1,
"q": [ 1, 2 ],
"A": [ "B", "C" ]
}
我可以通过创建一个名为“A”的新文本节点并使用
xdmp:node-replace()
和数组来分两步完成此操作,但我想一步完成此操作,而不是两步。这主要是因为我正在创建使用 xdmp:value()
执行任务的通用代码,这意味着我对事务有限制,并且无法在同一事务中分两步执行此操作。
有人可以帮忙吗?
当您拥有使用数组节点寻址命名属性的 XPath
/ConfiscatedItems
时,它将返回数组项的序列。这些项目将具有相同的名称,并会导致(如果您不明白发生了什么,则会令人困惑)错误消息XDMP-CHILDDUPNAME。
您想要返回数组节点,而不是数组中的项目。因此,将您的 XPath 更改为:
/ConfiscatedItems
至:
/array-node("ConfiscatedItems")
或者,匹配您发布的示例 JSON
/array-node("A")