在Azure Logic Apps中解析/迭代时如何指定JSON节点属性值?

时间:2019-05-30 14:15:23

标签: json azure-logic-apps

TL; DR,当设计者仅允许我访问父节点时,如何在Azure Logic Apps的 ParseJSON> For Each 步骤中指定特定的JSON节点属性? strong>

我正在构建一个逻辑应用程序,

  1. 从外部系统接收并解析人员列表作为JSON数据
  2. 构造具有不同结构的新JSON文件
  3. 将新文件发布到另一个外部系统

第1项的JSON响应具有以下结构:

{
    "Success": true,
    "Message": "Completed",
    "Result": [
        {
            "EmployeeId": {
                "DisplayValue": "PW123",
                "FieldHistory": []
            },
            "EmailId": {
                "DisplayValue": "*****.*****@******.co.uk",
                "FieldHistory": []
            }
        },
        {
            "EmployeeId": {
                "DisplayValue": "PW789",
                "FieldHistory": []
            },
            "EmailId": {
                "DisplayValue": "*****.*****@******.co.uk",
                "FieldHistory": []
            }
        },
        .... removed for brevity
    ]
}

在设计器中,如果我添加一个Data Operations > Parse JSON > For Each步骤,它可以让我指定属性,但是级别太高:

enter image description here

请注意,设计师给了我EmployeeId,但实际上我需要EmployeeId.DisplayValue,它既是属性,也是JSON格式的值,而不是仅包含EmployeeId或EmailId值的简单字符串。

可以使用设计器在更深层次上读取JSON吗?

2 个答案:

答案 0 :(得分:2)

如果我没记错的话,您可以在Parse_JSON()['EmployeeId']['DisplayValue']行中做某事<-这可能不是完全匹配,但是语法是类似的。

它们的实现方式是在代码视图中编写代码,或者在设计器中从表达式开始,添加具有动态内容的空格,然后添加['DisplayValue']标签结束。

答案 1 :(得分:1)

要支持AdAstra的意见并提供规范答案,以备将来参考...

ForEach块具有误导性,实际上并不是必需的。相反,需要一个Select块,但是必须在代码视图中对其进行编辑(如@AdAstra所建议),以挑选所需的字段:

enter image description here

enter image description here

我仍然需要弄清楚将输出包装在所需的结构中,并在解决该问题时进行更新。事实证明,由于代码的原因,将JSON转换为新结构也非常简单视图。我只是在现有逻辑周围指定了所需的输出:

             "from": "@body('Parse_JSON')?['Result']",
             "select": {
                 "Option1": "Value1",
                 "Option2": "Value2",
                 "People": [
                     {
                         "Email": "@item()['EmailId']['DisplayValue']",
                         "FirstName": "@item()['FirstName']['DisplayValue']"
                     }
                  ]
             }

请注意,在代码中指定了更复杂的选择后,Designer View不允许对其进行修改。