0

期望的行为

我正在尝试获取通过 Power Automate 中的 Microsoft Form 上传的文件的文件属性。

研究

我尝试了多种来源的建议,例如:

我是一位相当有经验的开发人员,我熟悉变量类型(String,ArrayObject)以及如何使用点或括号表示法引用对象中的项目以及通过索引访问数组项目

我也熟悉:

JSON.parse()

JSON.parse() 方法解析 JSON 字符串,构造字符串描述的 JavaScript 值或对象。

JSON.stringify()

JSON.stringify() 方法将 JavaScript 对象或值转换为 JSON 字符串

并阅读了有关 Power Automate 的Parse JSON操作的信息

要引用或访问 JavaScript 对象表示法 (JSON) 内容中的属性,您可以使用 Parse JSON 操作为这些属性创建用户友好的字段或标记。这样,您可以在为逻辑应用指定输入时从动态内容列表中选择这些属性。对于此操作,您可以提供 JSON 架构或从示例 JSON 内容或有效负载生成 JSON 架构

但是我仍然很难获得我需要的价值观。

我试过的

01) 用于Parse JSON访问响应体的属性:

在此处输入图像描述

02)运行 流程并查看Raw OutputsParse JSON

{
    "body": {
        "responder": "me@domain.com",
        "submitDate": "7/5/2021 7:03:26 AM",
        "letters-and-numbers-here-1": "some text here",
        "letters-and-numbers-here-2": "[{\"name\":\"File 01 Name.docx\",\"link\":\"https://tenant.sharepoint.com/sites/MySiteName/_layouts/15/Doc.aspx?sourcedoc=%7Bletters-and-numbers%7D&file=File%2001%20Name%20_Uploader%20Name.docx&action=default&mobileredirect=true\",\"id\":\"id-is-here\",\"type\":null,\"size\":20411,\"referenceId\":\"reference-id-is-here\",\"driveId\":\"drive-id-is-here\",\"status\":1,\"uploadSessionUrl\":null}]",
        "letters-and-numbers-here-3": "[{\"name\":\"File 02 Name.docx\",\"link\":\"https://tenant.sharepoint.com/sites/MySiteName/_layouts/15/Doc.aspx?sourcedoc=%7Bletters-and-numbers%7D&file=File%2002%20Name%20_Uploader%20Name.docx&action=default&mobileredirect=true\",\"id\":\"id-is-here\",\"type\":null,\"size\":20411,\"referenceId\":\"reference-id-is-here\",\"driveId\":\"drive-id-is-here\",\"status\":1,\"uploadSessionUrl\":null}]",
        "letters-and-numbers-here-4": "some other text here"
    }
}

03. 尝试获取第一个字段的name值。File Upload

我曾假设第一个Parse JSON会递归地将所有值设置为 JSON 对象,但是看起来该File Upload字段的值仍然是一个字符串。所以我想我必须在球场上做另一个Parse JSON动作File Upload

在此处输入图像描述

内容:

body('Parse_JSON')?['letters-and-numbers-here-2']

示例 JSON 有效负载:

{
    "letters-and-numbers-here-2": "[{\"name\":\"File 01 Name.docx\",\"link\":\"https://tenant.sharepoint.com/sites/MySiteName/_layouts/15/Doc.aspx?sourcedoc=%7Bletters-and-numbers%7D&file=File%2001%20Name%20_Uploader%20Name.docx&action=default&mobileredirect=true\",\"id\":\"id-is-here\",\"type\":null,\"size\":20411,\"referenceId\":\"reference-id-is-here\",\"driveId\":\"drive-id-is-here\",\"status\":1,\"uploadSessionUrl\":null}]"
}

这会产生错误:

[
  {
    "message": "Invalid type. Expected Object but got Array.",
    "lineNumber": 0,
    "linePosition": 0,
    "path": "",
    "schemaId": "#",
    "errorType": "type",
    "childErrors": []
  }
]

因此,我尝试针对ObjectFile Upload字段中的第一个Array,并尝试以下值作为Contentof Parse JSON 2

body('Parse_JSON')?['letters-and-numbers-here-2']?[0]

body('Parse_JSON')['letters-and-numbers-here-2'][0] 

两者都会产生错误:

无法在“1”行和“9206”列的操作“Parse_JSON_2”输入中处理模板语言表达式:'模板语言表达式'body('Parse_JSON')['letters-and-numbers-here-2'][0 ]' 无法评估,因为无法选择属性 '0'。“字符串”类型的值不支持属性选择。请参阅 https://aka.ms/logicexpressions 了解使用详情。

问题

如何访问File Upload字段属性?

作为参考,Microsoft Form 有 4 个类型的字段:

  • 文本
  • 文件上传(仅限 1 个文件)
  • 文件上传(仅限 1 个文件)
  • 选择

使用的连接器有:

, in ,body返回的是:Get response detailsRaw outputs

"body": {
    "responder": "me@domain.com",
    "submitDate": "7/5/2021 3:17:56 AM",
    "lots-of-letters-and-numbers-1":  "text string here",
    "lots-of-letters-and-numbers-2":  [{.....}],
    "lots-of-letters-and-numbers-3":  [{.....}],
    "lots-of-letters-and-numbers-4":  "text string here"
}
4

1 回答 1

0

我尝试了一种不同的方法,没有Parse JSON采取行动,并且可以访问文件名:

在此处输入图像描述

表达式值为:

`Compose` > `Inputs`:  json(body('Get_response_details')?['lots-of-letters-and-numbers-2'])
`Initialize Variable` > `Value`:  outputs('Compose')[0]['name']

或者,甚至更简单,只需使用Compose

在此处输入图像描述

或者Initialize variable

在此处输入图像描述

将此表达式与json()body()一起使用:

json(body('Get_response_details')?['lots-of-letters-and-numbers-2'])[0]['name']

我不确定这是否是最好的方法,或者它是否带有任何“陷阱”。

于 2021-07-06T04:11:49.120 回答