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>
(另一种可能是列表的列表,但这不太自然。)
我想遍历我在 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>
(另一种可能是列表的列表,但这不太自然。)