繁体   English   中英

XML to JSON Liquid 在特殊字符的逻辑应用程序中失败

[英]XML to JSON Liquid fails in Logic APP on special Characters

在此处输入图像描述

逻辑应用收到 XML 响应消息。 此消息使用液体模板从 XML 转换为 JSON,但是当 XML 响应中有特殊字符时,Liquid 失败...

  • XML 输入文件(浏览器显示)
<ET_KLANTEN_ALL>
 <item>
  <KUNNR>xxx</KUNNR>
  <NAME1>Strandshop "Allaart"</NAME1>
 </item>
</ET_KLANTEN_ALL>
XML encoded data
            <ET_KLANTEN_ALL>
                <item>
                    <KUNNR>xx</KUNNR>
                    <NAME1>Strandshop &#34;Allaart&#34;</NAME1>
                </item>
            </ET_KLANTEN_ALL>
            <ET_RETURN/>

液体"AfnemerNaam": "{{item.AfnemerNaam}}"

逻辑应用程序中的液体错误...不正确的LiquidTransformOutputType。

我试过使用单引号

液体"AfnemerNaam": '{{item.AfnemerNaam}}'

这适用于上述问题,但在以下情况下失败

XML 输入 Bowser 显示

<ET_KLANTEN_ALL>
 <item>
  <KUNNR>0000071719</KUNNR>
  <NAME1>*STK*Camping 't Strandheem</NAME1>
 </item>
</ET_KLANTEN_ALL>
<ET_KLANTEN_ALL>
                <item>
                    <KUNNR>Y</KUNNR>
                    <NAME1>*STK*Camping &#39;t Strandheem</NAME1>
                </item>
            </ET_KLANTEN_ALL>

可以对此提出一些建议....

JSON 中的必需输出

{
    "Afnemers": [
       
        {
            "AfnemerNummer": "0000036082",
            "AfnemerNaam": "Strandshop \"Allaart\"",
        }
    ]
}
{
    "Afnemers": [
        {
            "AfnemerNummer": "0000071719",
            "AfnemerNaam": "*STK*Camping 't Strandheem"

        }
    ]
}

只是一个建议,但如果您想避免使用液体,您可以使用表达式执行简单的 JSON 转换,然后循环遍历结果并使用循环将其转换为新结构。

最佳

使用上述内容,我将您的 XML(带有两个项目)加载到一个字符串变量中,然后在下一步中,使用Parse json步骤将其转换为一个中间 JSON 结构,该结构保留您想要的特殊字符等。

上面的表达式是...

json(xml(variables('XML')))

Parse json步骤的架构(为了让您更容易)是......

{
    "properties": {
        "ET_KLANTEN_ALL": {
            "properties": {
                "item": {
                    "items": {
                        "properties": {
                            "KUNNR": {
                                "type": "string"
                            },
                            "NAME1": {
                                "type": "string"
                            }
                        },
                        "required": [
                            "KUNNR",
                            "NAME1"
                        ],
                        "type": "object"
                    },
                    "type": "array"
                }
            },
            "type": "object"
        }
    },
    "type": "object"
}

这将创建这个 JSON ...

{
  "ET_KLANTEN_ALL": {
    "item": [
      {
        "KUNNR": "0000071719",
        "NAME1": "*STK*Camping 't Strandheem"
      },
      {
        "KUNNR": "xxx",
        "NAME1": "Strandshop \"Allaart\""
      }
    ]
  }
}

然后您需要做的就是遍历每个项目并将其附加到数组变量...

底流

...并最终确定结果。

设置结果

这是最后的游戏......!

结束游戏

如果您想将它加载到您自己的租户中,这是我的答案的 json 定义。

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "For_each": {
                "actions": {
                    "Append_to_Result": {
                        "inputs": {
                            "name": "Afnemers",
                            "value": {
                                "AfnemerNaam": "@{items('For_each')?['NAME1']}",
                                "AfnemerNummer": "@{items('For_each')?['KUNNR']}"
                            }
                        },
                        "runAfter": {},
                        "type": "AppendToArrayVariable"
                    }
                },
                "foreach": "@body('Parse_JSON')?['ET_KLANTEN_ALL']?['item']",
                "runAfter": {
                    "Initialize_Array": [
                        "Succeeded"
                    ]
                },
                "type": "Foreach"
            },
            "Initialize_Array": {
                "inputs": {
                    "variables": [
                        {
                            "name": "Afnemers",
                            "type": "array"
                        }
                    ]
                },
                "runAfter": {
                    "Initialize_Result": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Initialize_Result": {
                "inputs": {
                    "variables": [
                        {
                            "name": "Result",
                            "type": "object"
                        }
                    ]
                },
                "runAfter": {
                    "Parse_JSON": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Initialize_XML": {
                "inputs": {
                    "variables": [
                        {
                            "name": "XML",
                            "type": "string",
                            "value": "<ET_KLANTEN_ALL>\n <item>\n  <KUNNR>0000071719</KUNNR>\n  <NAME1>*STK*Camping 't Strandheem</NAME1>\n </item>\n <item>\n  <KUNNR>xxx</KUNNR>\n  <NAME1>Strandshop \"Allaart\"</NAME1>\n </item>\n</ET_KLANTEN_ALL>"
                        }
                    ]
                },
                "runAfter": {},
                "type": "InitializeVariable"
            },
            "Parse_JSON": {
                "inputs": {
                    "content": "@json(xml(variables('XML')))",
                    "schema": {
                        "properties": {
                            "ET_KLANTEN_ALL": {
                                "properties": {
                                    "item": {
                                        "items": {
                                            "properties": {
                                                "KUNNR": {
                                                    "type": "string"
                                                },
                                                "NAME1": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "KUNNR",
                                                "NAME1"
                                            ],
                                            "type": "object"
                                        },
                                        "type": "array"
                                    }
                                },
                                "type": "object"
                            }
                        },
                        "type": "object"
                    }
                },
                "runAfter": {
                    "Initialize_XML": [
                        "Succeeded"
                    ]
                },
                "type": "ParseJson"
            },
            "Set_Result": {
                "inputs": {
                    "name": "Result",
                    "value": {
                        "Afnemers": "@variables('Afnemers')"
                    }
                },
                "runAfter": {
                    "For_each": [
                        "Succeeded"
                    ]
                },
                "type": "SetVariable"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {},
        "triggers": {
            "Recurrence": {
                "evaluatedRecurrence": {
                    "frequency": "Month",
                    "interval": 12
                },
                "recurrence": {
                    "frequency": "Month",
                    "interval": 12
                },
                "type": "Recurrence"
            }
        }
    },
    "parameters": {}
}

我们已经使用液体对其进行了管理。 请注意在 JSON 中正确显示“文本”的解决方案使用单引号。 在所有其他情况下使用双引号。

 {% if item.AfnemerNaam contains '"' %}

      "AfnemerNaam": '{{item.AfnemerNaam}}'

 {% else %}

      "AfnemerNaam": "{{item.AfnemerNaam}}"

 {% endif %},

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM