0

Original Input json -

{
 "demo" : "a12,b45,c78" ,
 "status" :  "1" 
}

Expected output is xml

<demo>
<Value>a12</Value>
<Value>b45</Value>
<Value>c78</Value>
</demo>
<status>done</status>

I will first create a json and then use @xml() in logic app to convert this into xml tried like below which works fine but its hardcoded how to use foreach for dynamic.

{
 {% if content.status == "1" %}
 "status" : "done"
 {% elsif content.status == "2" %} 
      "status" : "done"
 {% endif %}
"demo": {"Value":["a12","b45","c78"]}
}

for demo c# code will be like -

 string a = "a12,b45,c78";

            var aa = a.Split(',').ToArray(); 
4

1 回答 1

2

对于这个需求,我们可以在逻辑应用中使用一些动作来获取"a12,b45,c78",然后将它们拆分为数组,然后将它们从json转换为xml。但是我觉得这个解决方案太复杂了,我们可能需要在逻辑应用中做很多操作。所以在你的逻辑应用中,你可以做你之前做过的事情并得到结果<demo>a12,b45,c78</demo>。然后使用 xslt map 将 xml 转换为您想要的格式。请参考以下步骤:

1.我做了你在问题中提到的同样的操作。 在此处输入图像描述

2.我们需要创建一个xslt模板如下:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="demo/text()" name="tokenize">
        <xsl:param name="separator" select="','"/>
        <xsl:for-each select="tokenize(.,$separator)">
                <Value>
                    <xsl:value-of select="normalize-space(.)"/>
                </Value>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

3.将 xslt 模板另存为 type of.xslt并将其上传到您的集成帐户的 Map。上传时,请选择“地图类型”为“XSLT 2.0”。

4.使用Transform XML 动作进行转换(选择您在上面上传的地图)。 在此处输入图像描述

5.之后,我们可以得到你想要的结果。 在此处输入图像描述

更新:

您可以使用以下液体模板:

{% assign arr = content.demo | Split: "," %}
{
    {% if content.status == "1" %}
        "status": "done",
    {% else %}
        "status": "undone",
    {% endif %}
    "demo": {
        "Value":[
            {% for item in arr  %}
                "{{item}}",
            {% endfor %}
        ]
    }
}

然后得到你想要的json数据:

{
  "status": "done",
  "demo": {
    "Value": [
      "a12",
      "b45",
      "c78"
    ]
  }
}
于 2020-03-06T03:54:29.677 回答