簡體   English   中英

如何創建n深度的Freemarker模板?

[英]How do I create a Freemarker template with n depth?

我正在嘗試使用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)

這是該問題的可接受設計嗎? 有沒有更好的方法來解決呢?

謝謝!

確實沒有while循環。 我能想到的最干凈的方法是<#list 0.. as _>...</#list> ,但要注意, 0..僅在具有足夠高的incompatible_improvements配置設置值的情況下才能正常工作(作為無窮級數)。 _只是一個普通變量,但表示我不在乎名稱。

但是,通常,最好使用遞歸來處理嵌套結構。 宏和函數支持這一點。 然后, #list -s(如果您根本需要它們)通常會通過數據模型的實際列表,而不是您作為變通方法構造的范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM