Нужна помощь по типам данных
- Войдите на сайт для отправки комментариев
Втр, 18/10/2016 - 13:00
Доброе время суток!
Понимаю, что вопрос ламерский, но запутался окончательно.
Задача простая, прочитать txt файл с SD-карты и скормить его парсеру JSON
JsonObject& parseObject(char* json, uint8_t nestingLimit=10); // <- recommended JsonObject& parseObject(const char* json, uint8_t nestingLimit=10); JsonObject& parseObject(const String& json, uint8_t nestingLimit=10);
Рекомендуется на вход парсера подавать char*
Читаю файл следующим кодом
String JsonString; if (SD.exists(filename)) { myFile = SD.open(filename); if (myFile) { while (myFile.available()) { char buff = myFile.read(); JsonString += buff; } myFile.close(); result = true; } } char buf [JsonString.length()]; JsonString.toCharArray(buf, JsonString.length()); Serial.println(buf); root = jsonBuffer.parseObject(buf);
Serial.println(buf) - отрабатывает корректно,
а вот jsonBuffer.parseObject(buf); - не принимает.
Помогите пожалуйста, если возможно с объяснениями.
Да, забыл написать, вот как выглядит пример парсера JSON
В чем отличие от моего примера, я не понимаю
Не принимает в каком смысле? Не компилируется?
На первый взгляд можно увидеть, что в примере массив имеет фиксированный размер, определяемый на этапе компиляции, а у вас он динамический (размер массива заранее не известен).
С какой целью добавлен промежуточный буфер в строках 13-14? Можно сделать проще, без него, например:
root = jsonBuffer.parseObject(JsonString.c_str());
Хотя, если честно, странно, можно и еще проще:
root = jsonBuffer.parseObject(JsonString);
JsonObject& parseObject(
const
char
* json, uint8_t nestingLimit=10);
kisoft, Спасибо за ответ!
root = jsonBuffer.parseObject(JsonString); - изначально так и было, тоже не понял, почему не компилится.
Нашел причину такого поведения.
У меня функция bool ReadJSONfromFile (File myFile, JsonObject& root)
я передаю в параметре root, как объект JSON
В таком виде root = jsonBuffer.parseObject(JsonString) не компилится.
JsonObject& root1 = jsonBuffer.parseObject(JsonString); - а вот так все работает
Странно это)))) Или нет?
Все, догнал!
parseObject - это метод конструктора, соответственно его нельзя вызвать для объекта, который уже как бы должен быть сконструирован.
kisoft, Спасибо за ответ!
root = jsonBuffer.parseObject(JsonString); - изначально так и было, тоже не понял, почему не компилится.
Почему не компилится - говорится в нижнем окне, когда включены подробные сообщения компилятора. Если туда посмотреть часто причину видно. Разумеется иногда бывает и так, что сообщение подробное, но почему не компилится - фиг догадаешься.
А вообще, если сразу к вопросу прилагать сообщения об ошибках, нам и ответ будет найти проще. Хотя лучше сначала понять что за сообщение и к какой части строки оно относится ;) Плюс иногда помогает (если уж совсем непонятно) скопировать строку с ошибкой и погуглить её, часто находится ответ на вопрос. Хотя тоже не всегда. Но всё таки есть варианты, нежели ждать, когда кто нибудь найдет ;)