如何在 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"
]
}
}
原始输入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"
]
}
}