2010-04-01 2 views
6

Я пытаюсь построить JSON из двух полей. Скажем, у меня есть список объектов (участник), и мне нужно передать только 2 элемента в виде пары JSON.рендеринг JSON в GRAILS с частью атрибутов объекта

def list = getMyList() //it contains 2 party objects 
partyTo = array { 
    for (i in list) { 
     x partyId: i.id 
     y partyName: i.toString()   
    } 
} 

Строка JSON является

{ 
    "partyTo": [ 
     {"partyId":12}, 
     {"partyName":"Ar"}, 
     {"partyId":9}, 
     {"partyName":"Sr"} 
    ] 
} 

, когда я извлечь его на клиенте, он рассматривается как 4 объектов. Я хотел как 2 объекта, с нижним форматом.

{ 
    "partyTo": [ 
     {"partyId":12, "partyName":"Ar"}, 
     {"partyId":9 , "partyName":"Sr"} 
    ] 
} 

Я получаю 4 объекта, возможно, потому, что я использую массив для сборки JSON. Я новичок в groovy и JSON, поэтому не уверен в правильных синтаксических комбинациях. Любая помощь высоко ценится. спасибо.

ответ

8

Вы правы в том, что проблема связана со строительством вашего массива. Для того, чтобы получить требуемую мощность вам нужно массив карт, одну карту для каждого объекта, а также получить общую «partyTo» объект, который нужно добавить, что список на другую карту:

def parties = [ 
      ["id":12 , "name":"Ar", "privateField": "a"], 
      ["id":9 , "name":"Sr", "privateField": "b"] 
    ] 

    def toRender = parties.collect { party-> 
     ["partyId": party.id, "partyName":party.name] 
    } 

    def result = ["partyTo" : toRender] 
    render result as JSON 

Другими словами, Grails карта превращается в объект JSON, а массивы Grails и списки становятся массивами в JSON

Если вы всегда хотите, чтобы ваши объекты «вечеринки», как это, вы могли бы использовать ObjectMarshaller. Более подробная информация в этом сообщении на rendering JSON using object marshallers

+0

благодарит вас за помощь. Я наткнулся на то же сообщение об объекте ObjectMarshaller и отлично поработал. Мне все еще было интересно узнать о вышеупомянутом решении. большое спасибо. С наилучшими пожеланиями. – bsr

Смежные вопросы