2016-03-21 3 views
0

Я довольно новичок в FTL, так что это может быть глупый вопрос, однако мне не посчастливилось его решить.FTL - Как правильно получить значения объекта JSON

У меня есть JSON объект:

{ 
    "Q1": "KOŽENÝ VOLANT", 
    "Q5": "ZESÍLENÉ ZÁVĚSY KOL", 
    "Q6": "AIRBAG SPOLUJEZDCE", 
    "M3": "BOČNÍ OCHR - LIŠ MALÉ", 
    "Q7": "SERVOŘÍZENÍ ELEKTR", 
    "M4": "SP" 
} 

И мне нужно, чтобы получить доступ к этим текстам на правой стороне. Как это сделать:

<#function getModelOptions> 
    <#local results = []> 
     <#list case.vehicleData.modelOptions?keys as key> 
      <#local results = results+[case.vehicleData.modelOptions[key]]> 
     </#list> 
    <#return results> 
</#function> 

и после этого что-то вроде:

<#assign dataVybavaVozidla = getModelOptions() > 
<@input.draw2ColumnNoBorderTable nadpis="Výbava vozidla" data=dataVybavaVozidla /> 

Это работает для меня на 90% случаев, но в некоторых это просто бросить мне ошибку:

> ---- FTL stack trace ("~" means nesting-related): 
>   - Failed at: #local results = results + [case.vehi... [in template "path/to/template.ftl" in function "getModelOptions" at line 
> 1501, column 25] 
>   - Reached through: #assign dataVybavaVozidla = getModelO... [in template "path/to/template.ftl" at line 674, column 17] 
> ---- 

Я пытаюсь сравнить данные в обоих случаях, когда он работает и когда он работает неправильно. Оба выглядят одинаково. Я также пытаюсь просто

<#list case.vehicleData.modelOptions?keys as key> 
    <tr>${key}</tr> 
</#list> 

, которые показывают мне мои ключи правильно :(

EDIT: Банкоматы это выглядит (я не могу подтвердить), что это может быть какой-то особый характер, как & и null . в тексте

+0

не можете просто использовать 'case.vehicleData.modelO ptions? values'? – ddekany

+0

Отсутствует верхняя часть указанных сообщений об ошибках. Кроме того, вы можете распечатать ключ, когда возникает ошибка, используя '<#attempt> ... <#recover> ...', поэтому вам не нужно гадать. Во всяком случае, FreeMarker не заботится о '&' в ключе. Это, безусловно, «нуль». – ddekany

ответ

1

Если ваши данные могут содержать нулевые значения, а затем добавить нуль-контроль:

<#if case.vehicleData.modelOptions[key]??> 
    <#local results = results+[case.vehicleData.modelOptions[key]]> 
</#if> 
+0

hi rostanek, вы правы, он создает массив объекта JSON, однако каждый из них имеет одно конкретное значение. Ваш результат вернет только ключ, который у меня уже есть – Andurit

+0

Привет, вы написали, что вам нужны «тексты на левом сайте», поэтому я предположил, что вам нужны ключи. Если ваши данные могут содержать нулевое значение, тогда вы должны добавить некоторую нуль-проверку, потому что FreeMarker терпит неудачу, когда он встречает нуль. – rostanek

+0

Эй, извините, вы прямо сейчас я вижу это :) отредактировал – Andurit

Смежные вопросы