我如何使用液体模板来验证我的JSON对象是否具有另一个对象或数组

发布于 2025-01-20 08:29:07 字数 2111 浏览 2 评论 0原文

我目前正在尝试找到一种方法来验证我的 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 个附加数据)时,数据将不会调用并被模板化,因为它不保留为对象/数组。

有什么想法吗?

I am currently trying to find a way to validate if my JSON object has another object in it or an array while using liquid templates.

I am using the xml-to-json policy which takes my below xml and turns it into JSON

  <additional-data-set>
    <additional-data>
      <name>LodgementDate</name>
      <value>24/04/2019 00:00:00 NZST</value>
    </additional-data>
  </additional-data-set>

Converted to JSON

"additional-data": {
        "name": "LodgementDate",
        "value": "24/04/2019 00:00:00 NZST"
    }

However when I add an additional-data to it i get the below

  <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>

Converted to JSON

"additional-data": [
        {
            "name": "LodgementDate",
            "value": "24/04/2019 00:00:00 NZST"
        },
        {
            "name": "LodgementDate1",
            "value": "25/05/2019 00:00:00 NZST"
        }
    ],

As you can see it goes from being an object to an array when there is two or more additional-data.

I am currently trying the below code to validate it as an array or not

{
{% 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 %}
            ]
        }
}

My problem is, the template cannot distinguish between the object and the array. And when calling each type (1 additional-data or 2 additional-data) the data will not call and be templated due to it not staying as an object/array.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

深巷少女 2025-01-27 08:29:07

如果在Azure APIM中直接使用液体模板,则数组元素的处理方式会有所不同。使用 JSONArrayfor 标签应该可以解决您的问题。请在上面的示例中找到以下工作代码:

[
            {% JSONArrayFor item in body.additional-data-set %}
                {
                    "name": "{{item.name}}",
                    "value": "{{item.value}}"
                }
            {% endJSONArrayFor %}]

If the liquid template is directly used in the Azure APIM, it has difference about how the array elements are handled. Using the JSONArrayfor tag should solve your problem. Please find below working code in the above example:

[
            {% JSONArrayFor item in body.additional-data-set %}
                {
                    "name": "{{item.name}}",
                    "value": "{{item.value}}"
                }
            {% endJSONArrayFor %}]
云仙小弟 2025-01-27 08:29:07

Liquid 模板允许您直接处理 XML 对象。在此示例中,您可以直接迭代输入并读取值,而无需任何开销。请找到下面的液体代码,它总是返回一个数组。

[
{% for item in content.additional-data-set %}
    {
        "name": "{{item.name}}",
        "value": "{{item.value}}"
    },
{% endfor %}]

液体模板输出快照:
在一个单一的:
输入图片此处描述
对于多个对象:
输入图片此处描述

Liquid template allows you to directly work on the XML objects. In this example you can directly iterate the input and read the values, without any overhead. Please find below liquid code, which always returns an array.

[
{% for item in content.additional-data-set %}
    {
        "name": "{{item.name}}",
        "value": "{{item.value}}"
    },
{% endfor %}]

The liquid template output snapshots:
In a single :
enter image description here
For multiple objects:
enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文