【问题标题】:How to use foreach and append string in liquid json transformation如何在液体 json 转换中使用 foreach 和附加字符串
【发布时间】:2020-03-06 13:58:12
【问题描述】:

原始输入 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(); 

【问题讨论】:

    标签: json azure transform azure-logic-apps dotliquid


    【解决方案1】:

    对于这个需求,我们可以在逻辑应用中使用一些动作来获取"a12,b45,c78",然后将它们拆分为数组,然后将它们从json转换为xml。但是我觉得这个解决方案太复杂了,我们可能需要在逻辑应用中做很多操作。所以在你的逻辑应用中,你可以做你之前做过的事情,得到结果&lt;demo&gt;a12,b45,c78&lt;/demo&gt;。然后使用 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 模板保存为 .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"
        ]
      }
    }
    

    【讨论】:

    • 嗨,我正在映射到 .liquid 文件有没有办法将表达式写入液体?我可以稍后在撰写时使用 xml() 转换为 xml 需要使用液体 - { "demo": {"Value":["a12","b45","c78"]} }
    • 用我的液体更新了问题,如果其他情况很好
    • 嗨@Neo 我会做一些测试并稍后更新我的答案。
    • @Neo 我已经更新了我的答案,请检查它是否符合您的要求。顺便说一句,如果您想通过逻辑应用程序中的“xml()”方法将结果 json 数据转换为 xml。您可能需要在 json 数据之外添加一个“”元素。
    • 谢谢@Neo。我会检查帖子并进行一些研究,但也许我会在下周回复你,因为我过一会儿就要下班了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    相关资源
    最近更新 更多