【问题标题】:Retrieving values from an extended hash in freemarker从 freemarker 中的扩展哈希中检索值
【发布时间】:2022-01-11 14:07:08
【问题描述】:

我有一个如下所示的数据集:

{
    "dataSet": [{
        "@etag": "2020-02-21T09:11:19.408         ",
        "text": "customer-old (ts001233)",
        "archived": true,
        "id": "932654d6-3f3b-452d-b256-66b9902a8952"
    }, {
        "@etag": "2021-12-21T21:12:13.648         ",
        "text": "customer (ts001234)",
        "archived": false,
        "id": "932654d6-3f3b-452d-b256-66b9902a8952"
    }, {
        "@etag": "2021-12-17T21:07:36.587         ",
        "text": "customer-test (ts001235)",
        "archived": false,
        "id": "85533cc2-320c-4d74-87e6-3233d26c8351"
    }],
    "templates": []
}

我正在尝试提取值“customer (ts001234)”,我可以使用以下代码来完成:

<#list dataSet as environments><#if environments.archived=false && !environments.text?contains('-test')>${environments.text}</#if></#list>

问题是这段代码依赖于过滤一个我不想使用的文本值(-test),因为文本值可能会有所不同。相反,我想检索 first 非归档环境。

我尝试使用 ?first :

<#list dataSet as environments><#if environments.archived=false && !environments.text?contains('-test')>${environments?first.text}</#if></#list>

但这会导致错误:

For "?first" left-hand operand: Expected a sequence or collection, but this has evaluated to an extended_hash (LinkedHashMap wrapped into f.t.DefaultMapAdapter):
==> environments  [in nameless template at line 1, column 119]

谁能给我一些关于如何在不过滤文本的情况下检索此值的指示?

【问题讨论】:

    标签: hash collections sequence freemarker


    【解决方案1】:

    假设environments 对应于您的示例中的[{"@etag": ...}, ...],我猜您尝试做的事情是这样的:

    <#assign firstUnarchived = environments?filter(it -> !it.archived)[0]>
    

    如果您没有未归档的条目,这将失败。因此,您可能只想将environments?filter(it -&gt; !it.archived) 分配给一个变量(没有[0]),比如说unarchivedEnvs,然后检查是否unarchivedEnvs?size != 0 等。

    如果您使用的是早于 2.3.29 的 FreeMarker 版本,您必须为此使用 #list,当您找到与 #if 的第一个匹配项时,您可以使用 &lt;#break&gt; 退出循环。

    【讨论】:

    • 谢谢,我没想过过滤序列。我让它工作: !it.archived)[0]> (...) ${firstUnarchivedEnvironment.text}
    猜你喜欢
    • 2022-01-24
    • 2014-01-02
    • 1970-01-01
    • 2013-10-18
    • 2017-06-10
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多