如何在 liquid json 转换中使用 foreach 和附加字符串

How to use foreach and append string in liquid json transformation

原始输入json -

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

预期输出为 xml

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

我将首先创建一个 json 然后在逻辑应用程序中使用 @xml() 将其转换为 xml foreach 用于动态。

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

演示 C# 代码将类似于 -

 string a = "a12,b45,c78";

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

针对这个需求,我们可以在logic app中使用一些action得到"a12,b45,c78",然后拆分成数组,再从json转换为xml。但是我觉得这个方案太复杂了,我们可能需要在logic app里面做很多操作。所以在你的逻辑应用中,你可以做你之前做过的事情并得到结果<demo>a12,b45,c78</demo>。然后使用 xslt 映射将 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模板另存为.xslt类型,上传到你的集成账号的Map中。上传时请选择"Map type"为"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"
    ]
  }
}