如何确保方括号[]包围节点的内容?

时间:2019-04-03 19:10:54

标签: json xml xslt biztalk azure-logic-apps

如何确保特定字段的转换始终在数组内部?

我的地图正在将XML有效负载转换为另一个XML有效负载。

Field1 --> use
Field2 --> system
Field3 --> value

这是“右侧”架构,其中identifier作为父节点:

enter image description here

转换后,XML结果为:

<ns0:identifier>
    <ns0:use>a</ns0:use>
    <ns0:system>b</ns0:system>
    <ns0:value>c</ns0:value>
</ns0:identifier>

如果我将其转换为json:

{
  identifier: {"use":"a", "system":"b", "value":"c"}
}

但是,我需要的结果是将identifier的内容包含在数组[]中:

{
  identifier: [{"use":"a", "system":"b", "value":"c"}]
}

如何确保此有效载荷始终位于数组内部?

为此resource

enter image description here

我已经尝试过这种解决方案;但是将最小值/最大值更改为1似乎对输出没有任何影响:

enter image description here

2 个答案:

答案 0 :(得分:1)

对于BizTalk Server 2013 R2和更高版本:

将最大出现次数设置为*(无限制)

对于在管道组件中使用JSON.Net的BizTalk Server 2013及更低版本:

您必须将json:Array属性添加到Xml架构上的Element上,以便JSON序列化程序始终将对象视为Array。

我们唯一的值为true:json:Array ='true'

此处的详细信息:Convert XML to JSON and force array

答案 1 :(得分:1)

如果您无法控制XML转换的方式,则只需要检查该值是否已经是数组就可以,如果不是数组则进行更改。

假设您将结果返回到名为res的变量中。

res = {identifier: {"use":"a", "system":"b", "value":"c"}};

然后,您可以使用像这样的代码来确保它是您想要的:

let res = {
  identifier: {
    "use": "a",
    "system": "b",
    "value":"c"
  }
};

console.log(res);
console.log('---------------------------');
if(!Array.isArray(res.identifier)) {
  res.identifier = [res.identifier];
}

console.log(res);