如何使用 Liquid 模板验证我的 JSON 对象是否有另一个对象或数组
How would I validate if my JSON object has another object or and Array, using Liquid Template
我目前正在尝试寻找一种方法来验证我的 JSON 对象在使用液体模板时是否有另一个对象或数组。
我正在使用 xml-to-json 政策,该政策将我的下方 xml 转换为 JSON
<additional-data-set>
<additional-data>
<name>LodgementDate</name>
<value>24/04/2019 00:00:00 NZST</value>
</additional-data>
</additional-data-set>
转换为JSON
"additional-data": {
"name": "LodgementDate",
"value": "24/04/2019 00:00:00 NZST"
}
然而,当我向它添加附加数据时,我得到以下内容
<additional-data-set>
<additional-data>
<name>LodgementDate</name>
<value>24/04/2019 00:00:00 NZST</value>
</additional-data>
<additional-data>
<name>LodgementDate1</name>
<value>25/05/2019 00:00:00 NZST</value>
</additional-data>
</additional-data-set>
转换为JSON
"additional-data": [
{
"name": "LodgementDate",
"value": "24/04/2019 00:00:00 NZST"
},
{
"name": "LodgementDate1",
"value": "25/05/2019 00:00:00 NZST"
}
],
如您所见,当有两个或更多附加数据时,它从一个对象变为一个数组。
我目前正在尝试使用下面的代码来验证它是否为数组
{
{% assign ads = body["p$ReadECODetailsResponse"].additional-data-set %}
"additional-data-set": {
"additional-data": [
{% if ads.additional-data.size < 0 %}
{% for addDataBody in ads.additional-data %}
{
"name": "{{addDataBody.name}}",
"value": "{{addDataBody.value}}"
}{% if forloop.last != true %},{% endif %}
{% endfor %}
{% break %}
{% else %}
{
"name": "{{ads.additional-data.name}}",
"value": "{{ads.additional-data.value}}"
}
{% break %}
{% endif %}
]
}
}
我的问题是,模板无法区分对象和数组。并且在调用每种类型(1 个附加数据或 2 个附加数据)时,数据不会调用和模板化,因为它不会保持为 object/array。
有什么想法吗?
液体模板允许您直接在 XML 对象上工作。在此示例中,您可以直接迭代输入并读取值,而无需任何开销。请在下面找到液体代码,它总是 returns 一个数组。
[
{% for item in content.additional-data-set %}
{
"name": "{{item.name}}",
"value": "{{item.value}}"
},
{% endfor %}]
液体模板输出快照:
在一个单一的:
对于多个对象:
如果在Azure APIM中直接使用liquid模板,数组元素的处理方式会有差异。使用 JSONArrayfor 标签应该可以解决您的问题。请在上面的示例中找到以下工作代码:
[
{% JSONArrayFor item in body.additional-data-set %}
{
"name": "{{item.name}}",
"value": "{{item.value}}"
}
{% endJSONArrayFor %}]
我目前正在尝试寻找一种方法来验证我的 JSON 对象在使用液体模板时是否有另一个对象或数组。
我正在使用 xml-to-json 政策,该政策将我的下方 xml 转换为 JSON
<additional-data-set>
<additional-data>
<name>LodgementDate</name>
<value>24/04/2019 00:00:00 NZST</value>
</additional-data>
</additional-data-set>
转换为JSON
"additional-data": {
"name": "LodgementDate",
"value": "24/04/2019 00:00:00 NZST"
}
然而,当我向它添加附加数据时,我得到以下内容
<additional-data-set>
<additional-data>
<name>LodgementDate</name>
<value>24/04/2019 00:00:00 NZST</value>
</additional-data>
<additional-data>
<name>LodgementDate1</name>
<value>25/05/2019 00:00:00 NZST</value>
</additional-data>
</additional-data-set>
转换为JSON
"additional-data": [
{
"name": "LodgementDate",
"value": "24/04/2019 00:00:00 NZST"
},
{
"name": "LodgementDate1",
"value": "25/05/2019 00:00:00 NZST"
}
],
如您所见,当有两个或更多附加数据时,它从一个对象变为一个数组。
我目前正在尝试使用下面的代码来验证它是否为数组
{
{% assign ads = body["p$ReadECODetailsResponse"].additional-data-set %}
"additional-data-set": {
"additional-data": [
{% if ads.additional-data.size < 0 %}
{% for addDataBody in ads.additional-data %}
{
"name": "{{addDataBody.name}}",
"value": "{{addDataBody.value}}"
}{% if forloop.last != true %},{% endif %}
{% endfor %}
{% break %}
{% else %}
{
"name": "{{ads.additional-data.name}}",
"value": "{{ads.additional-data.value}}"
}
{% break %}
{% endif %}
]
}
}
我的问题是,模板无法区分对象和数组。并且在调用每种类型(1 个附加数据或 2 个附加数据)时,数据不会调用和模板化,因为它不会保持为 object/array。
有什么想法吗?
液体模板允许您直接在 XML 对象上工作。在此示例中,您可以直接迭代输入并读取值,而无需任何开销。请在下面找到液体代码,它总是 returns 一个数组。
[
{% for item in content.additional-data-set %}
{
"name": "{{item.name}}",
"value": "{{item.value}}"
},
{% endfor %}]
液体模板输出快照:
在一个单一的:
如果在Azure APIM中直接使用liquid模板,数组元素的处理方式会有差异。使用 JSONArrayfor 标签应该可以解决您的问题。请在上面的示例中找到以下工作代码:
[
{% JSONArrayFor item in body.additional-data-set %}
{
"name": "{{item.name}}",
"value": "{{item.value}}"
}
{% endJSONArrayFor %}]