如何使用 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 %}]