Как передать json buffer как аргумент функции в ArduinoJson 6?

#include <Arduino.h>
#include <ArduinoJson.h> // @6.13.0

JsonDocument jsonParse(const String json, uint32_t buffer = 2048) {
    StaticJsonDocument<buffer> jsonBuffer;
    DeserializationError error = deserializeJson(jsonBuffer, json);

    if (error) {
        printToSerial(F("jsonParse error: "));
        printlnToSerial(error.c_str());
    }

    return jsonBuffer;
}

void setup() {
	const String json = F("{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}");
	JsonDocument document = jsonParse(json, 512);
	const String sensor = document[F("sensor")]; // "gps"
}

void loop() {}


На 5-ой строке, там где StaticJsonDocument<buffer> jsonBuffer; IDE (VSCode, PlatformIO) ругается на buffer - выражение должно иметь константное значение -- значение параметр "buffer" (объявлено в строке 4) невозможно использовать как константу

Вопрос: Как можно передать buffer параметром функции?
  • Вопрос задан
  • 316 просмотров
Решения вопроса 1
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Похоже что тут размер должен быть известен на этапе компиляции. Проще передать в функцию не размер буфера, а скажем сам буфер, или сделать функции шаблонный параметр с размером буфера.

Ваш вариант с переменной не подходит, потому что её значение на этапе компиляции не известно.

Можно ещё попробовать DynamicJsonDocument его размер можно указать в рантайме, согласно документации.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы