Logic Apps 液态模板询问

Logic Apps liquid template ask

我是 Liquid 的新手,几个小时前开始玩它。

我正在尝试解析 JSON 并从中提取某些键值对,但我根本没有成功。 JSON 是从 Azure 表单识别器输出的,我正在尝试在逻辑应用程序中执行 Liquid json 2 json。

JSON 看起来像这样

{
  "status": "success",
  "pages": [
    {
      "number": 1,
      "keyValuePairs": [
        {
          "key": [
            {
              "text": "Page No:",
              "boundingBox": [
                507.4
               ]
            }
          ],
          "value": [
            {
              "text": "1",
              "boundingBox": [
                586.8
              ],
              "confidence": 1.0
            }
          ]
        },
....
...

我正在寻找的是遍历 keyValuePairs 数组,然后从 "key" 数组中拉出 "text" 元素,然后 "text"+"confidence"来自 "value" 数组的元素。

你能帮我理解这里的方法吗?我尝试过类似的方法,但数组返回为空

{
"results":[
{% for kvp in content.keyValuePairs  %}

{% for mykey in kvp.key  %}

"thiskey":"{{mykey.text}}
{%- endfor -%}
{% for myval in kvp.value  %}

"thisvalue":{{myval.text}}
"thisconfidence":{{myval.confidence}}
{%- endfor -%}
{%- endfor -%}
]
}

第二个问题:调试 Liquid 的最佳方法是什么,这样我就可以看到哪里出错并进行调整?

谢谢!

我已尝试使用您的示例 JSON 有效载荷设计工作流程。

我已经解析了 JSON 模式并从中提取了所需的值。

由于您的 JSON 负载有点复杂,我们需要使用逻辑应用表达式从中提取值。

我使用的载荷:

{
"status": "success",
"pages": [{
    "number": 1,
    "keyValuePairs": [{
            "key": [{
                "text": "Page No:",
                "boundingBox": [
                    507.4
                ]
            }],
            "value": [{
                "text": "1",
                "boundingBox": [
                    586.8
                ],
                "confidence": 1.0
            }]
        },
        "null"
    ]
}]

}

一旦从上游操作获得 JSON 输出,就必须对其进行解析。

现在,初始化几个变量以从解析的 JSON.

中获取所需的值

要在第一个变量中使用的表达式: concat(body('Parse_JSON')?['pages'][0]?['keyValuePairs'][0]?['key'][0]?['text'],body('Parse_JSON')?['pages'][0]?['keyValuePairs'][0]?['value'][0]?['text'])

要在第二个变量中使用的表达式: body('Parse_JSON')?['pages'][0]?['keyValuePairs' ][0]?['value'][0]?['confidence']

最后,表单识别器之后的逻辑应用程序将如下所示:

希望对您有所帮助!

根据你提供的json数据样本和液体模板,我知道你的json属性keyValuePairs下面有不止一个对象数据。所以我认为使用 "Parse JSON" 动作不是一个好的解决方案,我们最好使用你在问题中提到的液体模板。但是我很困惑,如果您的 json 数据中 属性 pages 下有多个对象?

现在假设json数据在属性pages下只有一个对象,提供液体模板的解法供大家参考(如果json数据属性 pages下有多个对象,请提供更多您的需求细节,我会修改我的解决方案)。

我假设您的 json 数据如下:

{
    "status": "success",
    "pages": [
        {
            "number": 1,
            "keyValuePairs": [
                {
                    "key": [
                        {
                            "text": "Page No:",
                            "boundingBox": [
                                507.4
                            ]
                        }
                    ],
                    "value": [
                        {
                            "text": "1",
                            "boundingBox": [
                                586.8
                            ],
                            "confidence": 1.0
                        }
                    ]
                },
                {
                    "key": [
                        {
                            "text": "Page No:",
                            "boundingBox": [
                                507.4
                            ]
                        }
                    ],
                    "value": [
                        {
                            "text": "2",
                            "boundingBox": [
                                586.8
                            ],
                            "confidence": 2.0
                        }
                    ]
                }
            ]
        }
    ]
}

1.我们需要获取属性pages下的对象,放到"Transform JSON to JSON"的"content"中] 行动。我们可以首先解析整个 json 数据(使用 "Parse JSON" 操作)并执行如下操作:

2.上传液体模板到集成账号,请参考我的液体模板:

{
    "results":[
        {% for kvp in content.keyValuePairs  %}
            {%- if forloop.Last == true -%}
                {
                    {% for mykey in kvp.key  %}
                        "thiskey": "{{mykey.text}}",
                    {%- endfor -%}
                    {% for myval in kvp.value  %}
                        "thisvalue": "{{myval.text}}",
                        "thisconfidence": "{{myval.confidence}}"
                    {%- endfor -%}
                }
            {%- else -%}
                {
                    {% for mykey in kvp.key  %}
                        "thiskey": "{{mykey.text}}",
                    {%- endfor -%}
                    {% for myval in kvp.value  %}
                        "thisvalue": "{{myval.text}}",
                        "thisconfidence": "{{myval.confidence}}"
                    {%- endfor -%}
                },
            {%- endif -%}
        {%- endfor -%}
    ]
}

3.经过运行这个逻辑,我们可以得到结果为:

{
  "results": [
    {
      "thiskey": "Page No:",
      "thisvalue": "1",
      "thisconfidence": "1"
    },
    {
      "thiskey": "Page No:",
      "thisvalue": "2",
      "thisconfidence": "2"
    }
  ]
}

您需要注意的事项:

  1. 由于我们把属性pages下的对象放到"Transform JSON to JSON"动作的内容中,所以liquid模板中的content代表它.

  2. liquid template中需要注意逗号字符,所以我用{%- if forloop.Last == true -%}判断是否是循环的最后一个对象,再判断是否需要添加逗号字符。

关于what's the best approach for debugging Liquid ?的第二个问题,很遗憾,我认为我们只需完成液体模板并上传到集成帐户,然后我们就可以看到结果。不知道有没有办法方便我们调试。

希望对你有帮助~