我使用内置的MarkLogic json模块将一些xml结构作为json返回。在大多数情况下,它符合我的期望。但是,当标记为数组的元素为空时,它将返回空字符串而不是空数组。这是一个例子:
xquery version "1.0-ml";
import module namespace json = "http://marklogic.com/xdmp/json"
at "/MarkLogic/json/json.xqy";
let $config := json:config("custom")
return (
map:put( $config, "array-element-names", ("item") ),
json:transform-to-json(<result>
<item>21</item>
<item>22</item>
<item>23</item>
</result>, $config),
json:transform-to-json(<result></result>, $config))
结果:
{"result":{"item":["21", "22", "23"]}}
{"result":""}
如果 array-element-name 中没有匹配的项目&#34; item&#34;我希望空数组。即
{"result":{"item":[]}}
是否有某种方法可以配置它,因此它知道元素是 必需 ?
答案 0 :(得分:4)
不 - 它不会创造任何不存在的东西。在您的情况下,如果XML更复杂,该怎么办?没有&#39; where&#39;这样的元素可能存在 - 因此即使它想要它也无法创建它。
解决方案是在需要时通过添加一个元素来修复内容 - 或者将其转换为json-basic命名空间 - 其中这些元素位于标记为数组的元素内(可以为空) - 或者第三,使用一个XSD提示处理器做什么。但是仍然需要一个包含元素的数组&#39; - 然后项目将是minOccurance = 0。但是如果是这种情况,那么修复和转换为json / basic命名空间对于你的例子来说可能很简单。