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"
}
]
}
您需要注意的事项:
由于我们把属性pages
下的对象放到"Transform JSON to JSON"动作的内容中,所以liquid模板中的content
代表它.
liquid template中需要注意逗号字符,所以我用{%- if forloop.Last == true -%}
判断是否是循环的最后一个对象,再判断是否需要添加逗号字符。
关于what's the best approach for debugging Liquid ?
的第二个问题,很遗憾,我认为我们只需完成液体模板并上传到集成帐户,然后我们就可以看到结果。不知道有没有办法方便我们调试。
希望对你有帮助~
我是 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"
}
]
}
您需要注意的事项:
由于我们把属性
pages
下的对象放到"Transform JSON to JSON"动作的内容中,所以liquid模板中的content
代表它.liquid template中需要注意逗号字符,所以我用
{%- if forloop.Last == true -%}
判断是否是循环的最后一个对象,再判断是否需要添加逗号字符。
关于what's the best approach for debugging Liquid ?
的第二个问题,很遗憾,我认为我们只需完成液体模板并上传到集成帐户,然后我们就可以看到结果。不知道有没有办法方便我们调试。
希望对你有帮助~