Надеюсь, что это работает, я думаю, что вы можете создать очень индивидуальный конвертер с этим, чтобы он делал то, что вам нужно :-)

у меня есть простой объект, такой как

class Person {
  String name
  Integer age
}

Я могу легко отобразить его пользовательские свойства как JSON, используя JSONBuilder

def person = new Person(name: 'bob', age: 22)

def builder = new JSONBuilder.build {
  person.properties.each {propName, propValue ->

  if (!['class', 'metaClass'].contains(propName)) {

    // It seems "propName = propValue" doesn't work when propName is dynamic so we need to
    // set the property on the builder using this syntax instead
    setProperty(propName, propValue)
  }
}

def json = builder.toString()

Это прекрасно работает, когда свойства просты, то есть числа или строки. Однако для более сложного объекта, такого как

class ComplexPerson {
  Name name
  Integer age
  Address address
}

class Name {
  String first
  String second
}

class Address {
  Integer houseNumber
  String streetName
  String country

}

Есть ли способ, которым я могу пройти весь граф объектов, добавив каждое пользовательское свойство на соответствующем уровне вложенности в JSONBuilder?

Другими словами, для примераComplexPerson Я хотел бы, чтобы результат был

{
  name: {
    first: 'john',
    second: 'doe'
  },
  age: 20,
  address: {
    houseNumber: 123,
    streetName: 'Evergreen Terrace',
    country: 'Iraq'
  }
}
Обновить

Я не думаю, что смогу использовать для этого JSON-конвертер Grails, потому что реальная структура JSON, которую я возвращаю, выглядит примерно так

{ status: false,
  message: "some message",
  object: // JSON for person goes here 
}

Заметить, что:

JSON, сгенерированный дляComplexPerson является элементом большего объекта JSONЯ хочу исключить некоторые свойства, такие какmetaClass а такжеclass из преобразования JSON

Если возможно получить выходные данные преобразователя JSON в виде объекта, я мог бы выполнить итерацию и удалитьmetaClass а такжеclass свойства, затем добавьте его во внешний объект JSON.

Однако, насколько я могу судить, JSON-конвертер предлагает только подход «все или ничего» и возвращает его вывод в виде строки.