【问题标题】:How to verify if the input is numeric or string in liquid template?如何验证液体模板中的输入是数字还是字符串?
【发布时间】:2019-10-31 10:13:04
【问题描述】:
我将收到具有数字或字符串值两种组合的输入值。如果输入是数字,则需要将其映射到一个输出字段,如果输入是字符串,则需要映射到其他字段。
例如,输入:
[{
"Input": "ABC123"
},
{
"Input": "12345"
}]
输出:
[{
"String": "ABC123"
},
{
"Number": "12345"
}]
【问题讨论】:
标签:
shopify
liquid
dotliquid
【解决方案1】:
您可以使用 json 过滤器来确定类型,因为它会将字符串括在引号中,而不是数字。检查 " 字符,你会知道它是否是一个数字。也会覆盖你的边缘情况。
{% assign var1 = "1" %}
{% capture testValue %}{{ var1 | json }}{% endcapture %}
{% if testValue contains '"' %}string{% else %}number{% endif %}
【解决方案2】:
Dotliquid 目前没有此功能。它是开源项目,您可以下载源代码并在 StandardFilters.cs 中更改/添加新方法。然后,您可以使用它来满足您的要求。您可以根据自定义要求添加任意数量的操作。
例如
在 StandardFilters.cs 中添加以下方法
public static bool IsNumeric(object o)
{
return double.TryParse(Convert.ToString(o), out double result);
}
您可以在您的液体模板中使用此方法,例如,
{% assign string = '' %}
{% assign number = '' %}
{% assign isNumber = model.Input | IsNumeric %}
{% if isNumber == true %}
{% assign number = model.Input %}
{% else %}
{% assign string = model.Input %}
{% endif %}