Как проверить, является ли ввод числовым или строковым в шаблоне жидкости?

Я получу входные значения с двумя комбинациями: либо числовым, либо строковым значением. Если ввод представляет собой число, вам нужно сопоставить его с одним полем вывода, а если ввод представляет собой строку, сопоставленную с другим полем.

Например, ввод:

[{
"Input": "ABC123"
 },
 {
  "Input": "12345"
  }]

Выход:

[{
 "String": "ABC123"
 },
 {
 "Number": "12345"
 }]

person user3401527    schedule 31.10.2019    source источник
comment
Является ли 0 допустимым входным числом?   -  person Dave B    schedule 31.10.2019


Ответы (2)


Вы можете использовать фильтр json для определения типа, так как он заключает строку в кавычки, но не числа. Проверьте наличие символа ", и вы узнаете, является ли это числом. Это также закроет ваш пограничный случай.

{% assign var1 = "1" %}
{% capture testValue %}{{ var1 | json }}{% endcapture %}
{% if testValue contains '"' %}string{% else %}number{% endif %}
person Adam Strauss    schedule 31.10.2019

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 %}
person Ajay    schedule 09.12.2019