将xml数据转换为json时返回空数组

时间:2016-03-15 18:27:21

标签: json xml marklogic

我使用内置的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":[]}}

是否有某种方法可以配置它,因此它知道元素是 必需

1 个答案:

答案 0 :(得分:4)

不 - 它不会创造任何不存在的东西。在您的情况下,如果XML更复杂,该怎么办?没有&#39; where&#39;这样的元素可能存在 - 因此即使它想要它也无法创建它。

解决方案是在需要时通过添加一个元素来修复内容 - 或者将其转换为json-basic命名空间 - 其中这些元素位于标记为数组的元素内(可以为空) - 或者第三,使用一个XSD提示处理器做什么。但是仍然需要一个包含元素的数组&#39; - 然后项目将是minOccurance = 0。但是如果是这种情况,那么修复和转换为json / basic命名空间对于你的例子来说可能很简单。