我正在尝试使用Apache Freemarker以n层深的json-esque格式显示一些数据。在未知的情况下,我试图输出类似于以下内容的内容:
{
"name": "Human",
"type": "object",
"fields": [
{
"name": "weight"
"type": "int"
},
{
"name": "Origin"
"type": "object"
"fields": [
{
"name": "fatherOrigin"
"type": "object"
"fields": [
...
]
},
{
"name": "motherOrigin"
"type": "object"
"fields": [
...
]
}]
}]
}
我想使用一个while循环,用伪代码看起来像这样。
while(1){
if (currType is object) {
print what you know and walk deeper
}else{
print your output and break
}
但是,freemarker不支持while循环。我的替代方法是创建一个列表,该列表的大小大于任何合理的深度(30)
这是该问题的可接受设计吗?有没有更好的方法来解决呢?
谢谢!
答案 0 :(得分:1)
确实没有while
循环。我能想到的最干净的方法是<#list 0.. as _>...</#list>
,但要注意,0..
仅在具有足够高的incompatible_improvements
配置设置值的情况下才能正常工作(作为无穷级数)。 _
只是一个普通变量,但表示我不在乎名称。
但是,通常,最好使用递归来处理嵌套结构。宏和函数支持这一点。然后,#list
-s(如果您根本需要它们)通常会仔细检查数据模型中的实际内容,而不是您作为解决方法构建的范围。