Согласно документации десериализации Json () , второй входной аргумент принимает char*
с нулевой копией; и const char*
или const std::string&
с дублированием.
Прототипы в документации (только соответствующие):
// writable input => zero-copy
DeserializationError deserializeJson(JsonDocument& doc, char* input);
DeserializationError deserializeJson(JsonDocument& doc, char* input, size_t inputSize);
// read-only input => duplication
DeserializationError deserializeJson(JsonDocument& doc, const char* input);
DeserializationError deserializeJson(JsonDocument& doc, const char* input, size_t inputSize);
// ...
DeserializationError deserializeJson(JsonDocument& doc, const std::string& input);
Соблюдайте второй аргумент в приведенных выше прототипах!
Итак, следующие строки:
char json[] = value;
DeserializationError error = deserializeJson(doc, json);
будут иметь вид:
const char* json = value.c_str();
DeserializationError error = deserializeJson(doc, json);
Или непосредственно передать value
следующим образом:
DeserializationError error = deserializeJson(doc, value);
Это должно решить вашу проблему.
Ошибка, которую вы получаете по поводу этой строки:
char json[] = value;
// ^^
Размер массива char
здесь отсутствует. Вы должны указать размер массива stati c в этом контексте. Кроме того, value
не может быть конвертировано напрямую в этом случае.
Совет:
Используйте std :: string :: empty () в следующем случае :
if(value.length() > 0)
т.е.
if( !value.empty() )
Это более читабельно и выразительно!