Freemarker:迭代嵌套数组

Freemarker: iterate over nested array

我想遍历我在 Freemarker 中创建的嵌套数组,但不知道如何打印每个值。

数组变量

<#assign filters = [
    { "p1" : [ "performance" ] },
    { "p2" : [ "nav" ] },
    { "p3" : [ "quarterly" ] },
    { "f1" : [ "50496", "50497", "50501" ]},
    { "f2" : [ "51202", "51196", "51203", "51246", "51207", "51260" ]},
    { "f3" : [ "50504", "50505", "50506" ]},
    { "f4" : [ "50507", "50508", "50509", "50510", "50512" ]}
]>

遍历数组

<#list filters as filter>
    ${filter}'<#sep>,
</#list>

我想创建如下所示的输出:

$.plugin.function({
    p1: 'performance',
    p2: 'nav',
    p3: 'quarterly',
    fi: '50496' + '|' + '50497' + '|' + '50501',
    f2: etc....
});

我的错误是:

For "${...}" content: Expected a string or something automatically convertible to string (number, date or boolean), but this has evaluated to an extended_hash

有什么建议吗?

问题在于 Freemarker 无法将过滤器(散列)转换为字符串。我认为你想要按键功能。你现在在哪里

${filter}'<#sep>,

你会打电话给

<#list filter?keys as prop>
    ...
</#list>

并遍历这些键。在您的示例中,每个过滤器只有一个键,值

filter[prop]

将是数组,您还必须对其进行迭代。

Freemarker iterating over hashmap keys

我认为您使用散列列表使数据结构过于复杂。相反,只需使用散列:

<#assign filters = {
    "p1" : [ "performance" ],
    "p2" : [ "nav" ],
    "p3" : [ "quarterly" ],
    "f1" : [ "50496", "50497", "50501" ],
    "f2" : [ "51202", "51196", "51203", "51246", "51207", "51260" ],
    "f3" : [ "50504", "50505", "50506" ],
    "f4" : [ "50507", "50508", "50509", "50510", "50512" ]
}>

<#list filters?keys as name>
  ${name}: <#list filters[name] as value>'${value}'<#sep> + '|' + </#list><#sep>,
</#list>

(另一种可能是列表的列表,但这不太自然。)