【问题标题】:Logic Apps liquid template askLogic Apps 液体模板询问
【发布时间】:2020-02-15 19:27:58
【问题描述】:

我是 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”元素,从“value”数组中提取“text”+“confidence”元素。

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

{
"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 属性,请继续使用 Parse JSON 操作。
  • 您好,我提供了以下液体模板的解决方案,供您参考。如果对您的问题有帮助,请accept作为答案(点击我的答案旁边的复选标记,将其从灰色切换为已填充),在此先感谢~

标签: azure-logic-apps liquid-template


【解决方案1】:

根据您提供的json数据样本和液体模板,我知道您的json数据中keyValuePairs属性下的对象不止一个。所以我认为使用“解析 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属性下的对象,并将其放入“将JSON转换为JSON”动作的“内容”中。我们可以先解析整个 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属性下的对象放到了“将JSON转换为JSON”动作的内容中,所以液体模板中的content代表了它。

  2. 在液体模板中,我们需要注意逗号字符,所以我使用{%- if forloop.Last == true -%}判断它是否是循环中的最后一个对象,然后判断是否需要添加逗号字符。

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

希望对你有帮助~

【讨论】:

    【解决方案2】:

    我已尝试使用您的示例 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]?['信心']

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

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      相关资源
      最近更新 更多