[英]XML to JSON Liquid fails in Logic APP on special Characters
逻辑应用收到 XML 响应消息。 此消息使用液体模板从 XML 转换为 JSON,但是当 XML 响应中有特殊字符时,Liquid 失败...
<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 "Allaart"</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 '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.