рендеринг JSON в GRAILS с частью атрибутов объекта - PullRequest
6 голосов
/ 01 апреля 2010

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

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, поэтому не уверен насчет правильных синтаксических комбинаций.Любая помощь высоко ценится.спасибо.

1 Ответ

9 голосов
/ 02 апреля 2010

Вы правы в том, что проблема в построении вашего массива. Чтобы получить требуемый результат, вам нужен массив карт, по одной карте для каждого объекта, а для получения всего объекта 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 . Подробнее в этом посте о рендеринге JSON с использованием объектных маршаллеров

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...