É possível formatar a saída de dados JSON do Retrofit Android Java?

Boa tarde!

Estou com dificuldade em transformar o arquivo JSON convertido no retrofit. Eu preciso enviar os dados com esse formato:

{
  "celular": {
    "dataHora": "2022-01-24 00:00:00.000",
    "endereco": "logradouro, 0, bairro, 000000-000, municipio-AC, pais",
    "intervalo": 50,
    "latitude": -7.35,
    "longitude": 0,
    "serial": "89077890d",
    "quantidadeTags": 255
  },
  "tag": {
    "bateria": 9,
    "nome": "RF02",
    "temperatura": 63,
    "tipo": "BT123",
    "umidade": 13.54
  }
}

No entanto, a saída de dados atual está da seguinte forma:

{
   "dataHora":"2022/01/26 15:15:48",
   "latitude":-8.8896817,
   "longitude":-36.49808,
   "quantidadeTags":0,
   "serial":"46c0cb31ea8fdf20",
   "velocidadeMetroSegundo":0.008310194127261639,
   "tag":[
      {
         "bateria":91,
         "umidade":62.0,
         "temperatura":24.1,
         "tipo":"3901",
         "serial":"11192323",
         "nome":"FR02"
      }
   ]
}

Ou seja, preciso encapsular os dados do celular e retirar os colchetes do array de beacons.

Está é a minha classe Retrofit que pega o objeto e convert para o json

 private static Retrofit getRetrofit() {
        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        OkHttpClient okHttpClient = new OkHttpClient
                .Builder()
                .addInterceptor(httpLoggingInterceptor)
                .build();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(URL_HOMOLOGACAO_LOCAL)
                .addConverterFactory(GsonConverterFactory.create())
                .client(okHttpClient)
                .build();

        return retrofit;
    }

    public static LocalizacaoService getLocalizacaoService(){
        LocalizacaoService localizacaoService = getRetrofit().create(LocalizacaoService.class);

        return localizacaoService;
    }

Aqui é o meu DAO:

public class ScanDAO {
String Key = "";

private static List<Scan> beacons = new ArrayList<>();

public void salva(Scan scan) {
    beacons.add(scan);
}

public List<Scan> todosBeacons() {
    return new ArrayList<>(beacons);
}

}

Aqui é como eu to salvando na base:

 private Dispositivo criaDispositivo() {
    Timer timer = new Timer();
    if (timer != null)
        timer.cancel();
    timer = new Timer();
    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            try {
                synchronized (this) {
                    celular.setScan(scanDAO.todosBeacons());
                    celular.setLatitude(latitude);
                    celular.setLongitude(longitude);
                    celular.setVelocidadeMetroSegundo(velocidadeMetroSegundo);
                    celular.setSerial(obterIdDispositivo());
                    celular.setDataHora(obterDataHoraAtual());

                    salvaDispositivo(celular);
                    Log.i(TAG, "criaDispositivo: "+ celular.toString());
                }
            } catch (Exception e) {

            }
        }
    };
    timer.scheduleAtFixedRate(timerTask, INTERVALO_SALVAR, INTERVALO_SALVAR);
    return celular;
}

Consegui resolver esse problema utilizando um outra camada, usando o padrão de projeto DTO. Para ser mais preciso, eu criei uma classe genéria capaz de receber um Dispositivo e uma Tag.

public class RequestBeacon {
private Dispositivo dispositivo;
private Beacon beacon;

public RequestBeacon(Dispositivo dispositivo, Beacon beacon) {
    this.dispositivo = dispositivo;
    this.beacon = beacon;
}

}

No método de salvar eu chamo tanto o Dispositivo, assim como também a Tag e preencho os atributos. Logo após eu chamo o RequestTag e passo via construtor um dispositivo e um beacon.

Dispositivo dispositivo = new Dispositivo(Void... voids);
Beacon beacon = daoBeacon.todos();
RequestBeacon = new RequestBeacon(dispositivo, beacons);

Espero ter contribuído para a comunidade. ;D