【发布时间】:2020-03-15 23:51:38
【问题描述】:
情况
我正在使用 Azure Logic App 执行以下步骤:
- 从 Blob 存储加载/读取 JSON 文件。该文件是使用 R 语言创建和编写的,使用 JSONlite 包中的 toJSON 函数
- 从此 JSON 文件中获取 de 文件内容
- 将其转换为 JSON 格式(使用表达式 json())
- 将转换后的输出插入 Azure 表存储
请查看此工作流程的屏幕截图
我在 R 中创建了一个 JSON 文件(使用 JSONlite 包)。在 R 控制台中打印时,它看起来很好:
{"PartitionKey":"pdf","RowKey":"robject)test","nr":"24330087","status":true}
这是我想要的“格式”。当采用这种格式时,它会通过逻辑应用顺利插入到 Azure 表存储中。
问题
但是,当我将上面的 JSON 文件写入 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 文件,将其转换并将数据插入到表存储中。 所以理想情况下:将 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
}
}
从标题中,内容类型是“JSON”。但是主体(这是我想要的数据)是“八位字节流”)。
在“获取文件内容”操作之后:
{
"$content-type": "application/octet-stream",
"$content": "[content]"
}
下一步是将“body-data”转换/转换为 JSON 格式。使用逻辑APP中的表达式和动态内容
json(body('Get_blob_content'))
将此“输出”作为实体插入到表存储中。
【问题讨论】:
-
您好,请问我提供的解决方案是否解决了您的问题?如果还有问题,请随时告诉我~
-
嗨,快点,到目前为止它还没有工作。我正在尝试一个更优雅的解决方案。通过使用 HTTP 请求触发器。这几乎是一句话,但在最终的数据库插入中失败了。它说“无效输入”。但输入似乎是正确的 JSON 格式。请看下面
-
{ “PartitionKey”:“pdf”,“RowKey”:“filename.pdf”,“kvk_reg_date”:“2019-10-14T00:00:00”,“kvk_found_date”:“2019- 09-08T00:00:00”、“is_company_active”:真、“kvk_time_stamp”:“2019-11-21T09:23:47”、“kvk_nr_database”:“12345678”、“kvk_rsin”:“12345678”、“invoice_kvk_nr” :{“kvk_nr”:“12345678”,“kvk_direct”:真},“postalcode_4digits_search_vector”:“1234”,“company_names_vector”:“示例名称”}
-
您好,我刚才测试了一下,更新下面的答案。如果去掉红框内的数据,则不会显示错误信息。
标签: json azure-blob-storage azure-table-storage azure-logic-apps jsonlite