// after
typedef struct {
    const char* name;
    float value;
} sensor_value_t;

void read_sensors(sensor_value_t* sensors,
                  size_t* count)
{
    sensors[0].name = "temperature";
    sensors[0].value = get_temperature();

    sensors[1].name = "humidity";
    sensors[1].value = get_humidity();

    *count = 2;
}

void format_sensors_json(
    const sensor_value_t* sensors, size_t count,
    char* buffer, size_t buffer_size)
{
    int offset = 0;
    offset += snprintf(buffer + offset,
                       buffer_size - offset,
                       "{\"sensors\":[");

    for (size_t i = 0; i < count; i++) {
        if (i > 0) {
            offset +=
                snprintf(buffer + offset,
                         buffer_size - offset, ",");
        }
        offset += snprintf(
            buffer + offset, buffer_size - offset,
            "{\"name\":\"%s\",\"value\":%.2f}",
            sensors[i].name, sensors[i].value);
    }

    snprintf(buffer + offset, buffer_size - offset,
             "]}");
}

void get_sensor_data(void)
{
    char buffer[128] = {0};
    sensor_value_t sensors[2];
    size_t count = 0;

    read_sensors(sensors, &count);
    format_sensors_json(sensors, count, buffer,
                        128);
}
