如何从 Azure 逻辑应用程序工作流中的 json-file 数据中删除或防止转义斜线

How to remove or prevent escape slashes from json-file data in azure logic app workflow

情况

我正在使用 Azure 逻辑应用执行以下步骤:

  1. Load/read 来自 blob 存储的 JSON 文件。这个文件是用 R 创建和编写的,使用 toJSON 函数 fromt JSONlite package
  2. 从此 JSON 文件中获取文件内容
  3. 将其转换为 JSON 格式(使用表达式 json())
  4. 将转换后的输出插入 Azure Table 存储

请查看此工作流程的屏幕截图

azure workflow

我在 R 中创建了一个 JSON-file(使用 JSONlite 包)。在 R 控制台中打印时,它看起来不错:

{"PartitionKey":"pdf","RowKey":"robject)test","nr":"24330087","status":true}

这就是我想要的'formatting'。采用这种格式时,它可以使用逻辑应用程序顺利插入天蓝色 table 存储。

问题

但是当我将上面的 JSON-file 写入 Azure Blob,并将此文件用作逻辑应用程序工作流中的输入时,这些转义斜杠会导致问题

逻辑应用未以所需格式解释 blob 存储中的文件(没有转义斜杠)它包含转义斜杠 ()。我认为这会导致逻辑应用程序出现问题。我粘贴了没有这些斜杠的硬编码格式。这奏效了。但是硬编码在这里不是一个选项。

逻辑应用 'json()' 表达式的格式如下。它包括可怕的逃脱。

[
  "{\"PartitionKey\":\"pdf\",\"RowKey\":\"coolblue_factuur_1744212700.pdf\",\"kvknr\":\"24330087\",\"active_status\":true}"
]

然后出现这个错误:

{
  "odata.error": {
    "code": "InvalidInput",
    "message": {
  "lang": "en-US",
  "value": "An error occurred while processing this request.\nRequestId:xxxx\nTime:2019-11-20T09:02:46.6051827Z"
}
  }
}

经过一些在线研究,看起来 Logic App 在使用转义斜杠 () 和它转义的双引号 (") 时遇到困难。所以所有这些 (\") 转义都阻碍了流程。

问题

如何处理 \"(转义斜杠?)。我想要的只是逻辑应用程序可以从 blob 存储中正确读取 JSON-file,将其转换并将数据插入 table贮存。 所以理想情况下:将 JSON 文件从 blob 存储转换为没有转义斜杠的格式。我试图在 R 中对此进行预处理,但这没有用。

额外信息

您可以在下面找到我在逻辑应用程序中执行的步骤:

从 blob 存储上传(和提取)的 JSON 文件

{
"headers": {
    "Pragma": "no-cache",
    "Transfer-Encoding": "chunked",
    "Retry-After": "15",
    "Vary": "Accept-Encoding",
    "x-ms-request-id": "xxxx",
    "Strict-Transport-Security": "max-age=31536000; includeSubDomains",
    "X-Content-Type-Options": "nosniff",
    "X-Frame-Options": "DENY",
    "Timing-Allow-Origin": "*",
    "x-ms-apihub-cached-response": "true",
    "Cache-Control": "no-store, no-cache",
    "Date": "Wed, 20 Nov 2019 09:09:52 GMT",
    "Location": "https://[location url]",
    "Set-Cookie": "[cookieset]",
    "Content-Type": "application/json",
    "Expires": "-1",
    "Content-Length": "452"
},
"body": {
    "Id": "xyz",
    "Name": "robjecttest_parameters_db.json",
    "DisplayName": "robjecttest_parameters_db.json",
    "Path": "/path/robjecttest_parameters_db.json",
    "LastModified": "2019-11-20T09:09:39Z",
    "Size": 95,
    "MediaType": "application/octet-stream",
    "IsFolder": false,
    "ETag": "\"[etag]\"",
    "FileLocator": "[filelocations]",
    "LastModifiedBy": null
}
}

来自 headers,内容类型为 'JSON'。但是 body (这是我想要的数据)是 'octet-stream').

'get filecontent' 操作后:

{
  "$content-type": "application/octet-stream",
  "$content": "[content]"
}

下一步是 convert/cast 将 'body-data' 转换为 JSON 格式。使用来自逻辑 APP

的表达式和动态内容
json(body('Get_blob_content'))

使用此 'output' 作为实体插入 table 存储。

您只需要用下面的表达式将 \" 替换为 ":

replace(string(body('Get_blob_content')), '\"', '"')

然后我们可以使用json()来转换它。

更新:

在你的json数据中插入到table存储中,下面红框内的数据导致了问题

你不能用二级数据插入它。