0

我是 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 的最佳方法是什么,以便我可以看到哪里出错并进行调整?

谢谢!

4

2 回答 2

1

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

现在我假设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“Transform JSON to JSON”动作的内容上,所以content液体模板中的 代表了它。

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

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

希望有帮助~

于 2020-02-17T02:40:57.900 回答
0

我尝试使用您的示例 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']

在此处输入图像描述

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

在此处输入图像描述

我希望它有帮助!

于 2020-02-16T10:21:34.633 回答