Freemarker: конвертировать дату из Scientifi c в число - PullRequest
0 голосов
/ 20 апреля 2020

Я полный Freemarker newb ie, и я использую фреймворк, который использует шаблон Freemarker. Я пытаюсь отсортировать последовательность хэшей на основе определенного поля «дата».

Мой ввод json выглядит следующим образом:

{"fields": [
                [
                    {
                        "contentType": "application/json",
                        "date": 1.563457325E9,
                        "id": "abc",
                        "size": 0.0
                    },
                    {
                        "contentType": "application/json",
                        "date": 1.563426843E9,
                        "id": "def",
                        "size": 0.0
                    },
                    {
                        "contentType": "application/json",
                        "date": 1.563454092E9,
                        "id": "ghi",
                        "size": 0.0
                    },
                    {
                        "contentType": "application/json",
                        "date": 1.563425862E9,
                        "id": "jkl",
                        "size": 0.0
                    },
                    {
                        "contentType": "application/json",
                        "date": 1.563426128E9,
                        "id": "mno",
                        "size": 0.0
                    },
                    {
                        "contentType": "application/json",
                        "date": 1.563453696E9,
                        "id": "pqr",
                        "size": 0.0
                    },
                    {
                        "contentType": "application/json",
                        "date": 1.563426813E9,
                        "id": "stu",
                        "size": 0.0
                    },
                    {
                        "contentType": "application/json",
                        "date": 1.563426177E9,
                        "id": "vwx",
                        "size": 0.0
                    }
                ]
            ]
        }

Когда я пытаюсь сделать это: <#assign j=fields[0].eval>, я получаю следующую ошибку:

Не удалось "? eval" строку с этой ошибкой: --- begin-message --- Синтаксическая ошибка в? eval-ed строке в строке 1, столбец 55: обнаружен "E9", но ожидалось одно из: ".." ".. " "," "}" "." "[" "(" "?" "!" "??" "+" "-" "" "/" "%" "! =" "=" "==" "> =" "> "--- end-message --- Сбой выражения: ==> fields [0]? eval [в шаблоне" 89-1070010335 "в строке 1, столбец 14] ---- Трассировка стека FTL (" ~ "означает связанные с вложением)

Я хочу сделать что-то вроде этого:

<#assign j=fields[0]>
<#list j?sort_by("date") as i>
  ${i.date}: ${i.id}
</#list>

Как я могу преобразовать поле даты из нотации scientifi c в число в freemarker, а затем sort_by, основанный на значении этого поля даты?

Я был бы рад, если бы я мог получить некоторые указатели или какую-либо конкретную ссылку из Замечания по документации Freemarker .

1 Ответ

1 голос
/ 24 апреля 2020

Поскольку модель данных содержит вложенные списки, поэтому мы должны использовать в шаблоне директивы вложенных списков, как показано ниже.

  <#list fields as field>
    <#list field?sort_by("date") as innerField>
      ${innerField.date?replace(",", "")} : ${innerField.id}
    </#list>
    </#list>

Ниже фрагмент кода преобразует научную нотацию c в число.

<#assign scientificFormat = "1.563426177E9">
<#assign number = scientificFormat?number?replace(",", "")>
${number}

Источник: https://freemarker.apache.org/docs/ref_builtins_sequence.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...