рендеринг JSON в Grails с частью атрибутов объекта

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

6
задан jstricker 11 September 2014 в 17:13
поделиться

1 ответ

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

9
ответ дан 10 December 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: