【问题标题】:FTL - How to get values of JSON object correctlyFTL - 如何正确获取 JSON 对象的值
【发布时间】:2016-07-07 18:30:44
【问题描述】:

我是 FTL 的新手,所以这可能是一个愚蠢的问题,但我没有幸运地解决它。

我有一个 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>

正确显示我的钥匙:(

编辑: Atm 看起来(我无法确认)它可以是一些特殊字符,例如 &amp;null 在文本中。

【问题讨论】:

  • 你不能用case.vehicleData.modelOptions?values吗?
  • 缺少引用的错误消息的顶部。此外,当错误发生时,您可以使用&lt;#attempt&gt;...&lt;#recover&gt;...&lt;/#attempt&gt; 打印密钥,因此您不必猜测。无论如何,FreeMarker 并不关心密钥中的&amp;。这肯定是某个地方的null

标签: json freemarker


【解决方案1】:

如果您的数据可以包含空值,则添加空值检查:

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

【讨论】:

  • 嗨 rostanek,你是对的,它创建 JSON 对象数组,但是每个对象都有一个特定的值。您的结果将只返回一个我已经拥有的密钥
  • 嗨,您写道您需要“左侧站点上的文本”,所以我假设您需要密钥。如果您的数据可以包含空值,那么您应该添加一些空值检查,因为 FreeMarker 在遇到空值时会失败。
猜你喜欢
  • 2017-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多