Нужна помощь по типам данных
- Войдите на сайт для отправки комментариев
Втр, 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
char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}"; JsonObject& root = jsonBuffer.parseObject(json);В чем отличие от моего примера, я не понимаю
Не принимает в каком смысле? Не компилируется?
На первый взгляд можно увидеть, что в примере массив имеет фиксированный размер, определяемый на этапе компиляции, а у вас он динамический (размер массива заранее не известен).
С какой целью добавлен промежуточный буфер в строках 13-14? Можно сделать проще, без него, например:
root = jsonBuffer.parseObject(JsonString.c_str());
Хотя, если честно, странно, можно и еще проще:
root = jsonBuffer.parseObject(JsonString);
JsonObject& parseObject(constchar* 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); - изначально так и было, тоже не понял, почему не компилится.
Почему не компилится - говорится в нижнем окне, когда включены подробные сообщения компилятора. Если туда посмотреть часто причину видно. Разумеется иногда бывает и так, что сообщение подробное, но почему не компилится - фиг догадаешься.
А вообще, если сразу к вопросу прилагать сообщения об ошибках, нам и ответ будет найти проще. Хотя лучше сначала понять что за сообщение и к какой части строки оно относится ;) Плюс иногда помогает (если уж совсем непонятно) скопировать строку с ошибкой и погуглить её, часто находится ответ на вопрос. Хотя тоже не всегда. Но всё таки есть варианты, нежели ждать, когда кто нибудь найдет ;)