在逻辑应用程序中字符串化 JSON
Stringify JSON in Logic App
我们正在使用逻辑应用向服务总线发送消息。这些消息稍后将被另一个服务使用,该服务期望消息内容是一个字符串——本质上是一个字符串化的 JSON 对象,带有转义字符。
我们找不到在逻辑应用程序中对 JSON 对象进行字符串化的方法。即使我们显式提供转义字符串,逻辑应用程序本身也会检测到它已被字符串化 JSON 并取消转义,然后将其作为 JSON 对象发送。我们不希望这样,我们只是希望它按原样发送字符串。我们已经尝试将内容类型更改为 text/plain,但它不起作用。逻辑应用始终将未转义的字符串作为 JSON 发送。
MSDN 上的post:https://social.msdn.microsoft.com/Forums/office/en-US/e5dee958-09a7-4784-b1bf-facdd6b8a568/post-json-from-logic-app-how-to-escape-data?forum=azurelogicapps 没有任何帮助,因为这样做会违反消息消费服务的请求合同
您是否需要字符串化的消息包含左双引号和右双引号?
我已经试过了,它对我有用。
- 我有我的 JSON 对象作为 compose
的输出
- 然后,我用转义字符串化的 Base64 编码值初始化了一个变量 JSON (你需要添加所有需要的正确转义,
我的只是一个 PoC)
然后,您将已经在 Base64 中的变量发送到服务总线。 (您需要删除该操作的编码)。
"actions": {
"Compose_JSON_Object": {
"inputs": {
"message": "I want this as a string"
},
"runAfter": {},
"type": "Compose"
},
"Initialise_Variable_with_Stringified_JSON_Base64_Encoded": {
"inputs": {
"variables": [
{
"name": "jsonAsStringBase64",
"type": "String",
"value": "@base64(concat('\"', replace(string(outputs('Compose_JSON_Object')), '\"', '\\"'), '\"'))"
}
]
},
"runAfter": {
"Compose_JSON_Object": [
"Succeeded"
]
},
"type": "InitializeVariable"
},
"Send_message": {
"inputs": {
"body": {
"ContentData": "@variables('jsonAsStringBase64')",
"ContentType": "text/plain"
},
"host": {
"connection": {
"name": "@parameters('$connections')['servicebus']['connectionId']"
}
},
"method": "post",
"path": "/@{encodeURIComponent(encodeURIComponent('temp'))}/messages",
"queries": {
"systemProperties": "None"
}
},
"runAfter": {
"Initialise_Variable_with_Stringified_JSON_Base64_Encoded": [
"Succeeded"
]
},
"type": "ApiConnection"
}
},
这样,我就把消息字符串化了。
HTH
我们正在使用逻辑应用向服务总线发送消息。这些消息稍后将被另一个服务使用,该服务期望消息内容是一个字符串——本质上是一个字符串化的 JSON 对象,带有转义字符。
我们找不到在逻辑应用程序中对 JSON 对象进行字符串化的方法。即使我们显式提供转义字符串,逻辑应用程序本身也会检测到它已被字符串化 JSON 并取消转义,然后将其作为 JSON 对象发送。我们不希望这样,我们只是希望它按原样发送字符串。我们已经尝试将内容类型更改为 text/plain,但它不起作用。逻辑应用始终将未转义的字符串作为 JSON 发送。
MSDN 上的post:https://social.msdn.microsoft.com/Forums/office/en-US/e5dee958-09a7-4784-b1bf-facdd6b8a568/post-json-from-logic-app-how-to-escape-data?forum=azurelogicapps 没有任何帮助,因为这样做会违反消息消费服务的请求合同
您是否需要字符串化的消息包含左双引号和右双引号?
我已经试过了,它对我有用。
- 我有我的 JSON 对象作为 compose 的输出
- 然后,我用转义字符串化的 Base64 编码值初始化了一个变量 JSON (你需要添加所有需要的正确转义, 我的只是一个 PoC)
然后,您将已经在 Base64 中的变量发送到服务总线。 (您需要删除该操作的编码)。
"actions": { "Compose_JSON_Object": { "inputs": { "message": "I want this as a string" }, "runAfter": {}, "type": "Compose" }, "Initialise_Variable_with_Stringified_JSON_Base64_Encoded": { "inputs": { "variables": [ { "name": "jsonAsStringBase64", "type": "String", "value": "@base64(concat('\"', replace(string(outputs('Compose_JSON_Object')), '\"', '\\"'), '\"'))" } ] }, "runAfter": { "Compose_JSON_Object": [ "Succeeded" ] }, "type": "InitializeVariable" }, "Send_message": { "inputs": { "body": { "ContentData": "@variables('jsonAsStringBase64')", "ContentType": "text/plain" }, "host": { "connection": { "name": "@parameters('$connections')['servicebus']['connectionId']" } }, "method": "post", "path": "/@{encodeURIComponent(encodeURIComponent('temp'))}/messages", "queries": { "systemProperties": "None" } }, "runAfter": { "Initialise_Variable_with_Stringified_JSON_Base64_Encoded": [ "Succeeded" ] }, "type": "ApiConnection" } },
这样,我就把消息字符串化了。
HTH