2012-10-30 24 views
0

我有2個問題與JsonBuilder。我已經通過研究嘗試了一切。這是我解決這個問題時最接近的,但這是不對的。Groovy 2 JsonBuilder嵌套可重複關聯

  1. 陣列天和議程不具有功能 - 他們出來作爲非數組。
  2. 由於某種原因,第2天的議程數據即將出現在第1天的議程結構中。基礎數據是正確的。

這裏是建築

def root = builder.output { 
    days { 
     for (Day day : model.days) { 
      "$day.name" { 
       agendas { 
        for (Agenda agenda : day.agendas) { 
         "$agenda.name" { 
          name agenda.name 
         } 
        } 
       } 
      } 
     } 
    } 
} 

JSON

{ "output": { 
    "days": { 
     "Day 1": { 
      "agendas": { 
       "Day 2 Agenda B": { 
        "name": "Day 2 Agenda A" 
       }, 
       "Day 2 Agenda A": { 
        "name": "Day 2 Agenda A" 
       } 
      } 
     }, 
     "Day 2": { 
      "agendas": { 
       "Day 2 Agenda B": { 
        "name": "Day 2 Agenda A" 
       }, 
       "Day 2 Agenda A": { 
        "name": "Day 2 Agenda A" 
       } 
      } 
     } 
    } 
}} 

什麼我後:

{ "output": { 
    "days": [ 
     { 
      "name": "Day 1", 
      "agendas": [ 
       { 
        "name": "Day 1 Agenda A" 
       }, 
       { 
        "name": "Day 1 Agenda B" 
       } 
      ] 
     }, 
     { 
      "name": "Day 2", 
      "agendas": [ 
       { 
        "name": "Day 2 Agenda A" 
       }, 
       { 
        "name": "Day 2 Agenda B" 
       } 
      ] 
     } 
    ] 
}} 

回答

0

我終於:)

def builder = new JsonBuilder() 

    builder { 
     days(days.collect { day -> 
      [ 
       name: day.name, 
       agendas: day.agendas.collect { agenda -> 
        name: agenda.name 
       } 
      ] 
     }) 
    } 
+0

我認爲你可以做,沒有'收集()'。只需使用'days(days){day->'。另外[name:day.name]這將創建後來轉換爲JSON的地圖。相反,你可以使用DSL – faskunji

0

可以毫不collect()就像這樣:

builder.days(DAYS) { day-> 
    name day.name 
    agendas(day.agendas){ agenda -> 
     name agenda.name 
    } 
} 

這是輸出:

{ 
    "days": [ 
     { 
      "name": "Day 1", 
      "agendas": [ 
       { 
        "name": "Day 1 Agenda A" 
       }, 
       { 
        "name": "Day 1 Agenda B" 
       } 
      ] 
     }, 
     { 
      "name": "Day 2", 
      "agendas": [ 
       { 
        "name": "Day 2 Agenda A" 
       }, 
       { 
        "name": "Day 2 Agenda B" 
       } 
      ] 
     } 
    ] 
}