我如何使用液体模板来验证我的JSON对象是否具有另一个对象或数组
我目前正在尝试找到一种方法来验证我的 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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果在Azure APIM中直接使用液体模板,则数组元素的处理方式会有所不同。使用 JSONArrayfor 标签应该可以解决您的问题。请在上面的示例中找到以下工作代码:
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:
Liquid 模板允许您直接处理 XML 对象。在此示例中,您可以直接迭代输入并读取值,而无需任何开销。请找到下面的液体代码,它总是返回一个数组。
液体模板输出快照:


在一个单一的:
对于多个对象:
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.
The liquid template output snapshots:


In a single :
For multiple objects: