Как использовать foreach и добавлять строку в преобразовании json - PullRequest
0 голосов
/ 05 марта 2020

Исходный ввод json -

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

Ожидаемый результат: xml

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

Сначала я создам json, а затем использую @ xml () в приложении logi c для преобразования этого в xml попробовал, как показано ниже, который отлично работает, но его жестко запрограммировано, как использовать foreach для динамического c.

{
 {% 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(); 

1 Ответ

2 голосов
/ 06 марта 2020

Для этого требования мы можем использовать некоторые действия в приложении logi c, чтобы получить "a12,b45,c78" и затем разделить их на массив, а затем преобразовать их из json в xml. Но я думаю, что это решение слишком сложное, нам может потребоваться выполнить много операций в приложении logi c. Таким образом, в вашем приложении logi c вы можете сделать то, что делали раньше, и получить результат <demo>a12,b45,c78</demo>. Затем используйте xslt map для преобразования ths xml в нужный вам формат. Пожалуйста, обратитесь к следующим шагам:

1. Я делаю ту же операцию, что вы упомянули в своем вопросе. enter image description here

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 и загрузите его на карту своей учетной записи интеграции. Когда вы выполняете загрузку, выберите «Тип карты» как «XSLT 2.0».

4. Используйте преобразование XML, чтобы выполнить преобразование (выберите карту, которую вы загрузили выше ). enter image description here

5. После этого мы можем получить желаемый результат. enter image description here

Обновление:

Вы можете использовать шаблон жидкости, как показано ниже:

{% 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"
    ]
  }
}
...