Большое число в переменную
Вероятно, что-то простое, но я не решил.
Я извлекаю данные из строки JSON, и все значения верны для двух.
Они относятся к двум значениям даты и времени в миллисекундах.
Один – дата обновления, второй – дата обновления.
Проблема в том, что они оба очень большие, и мне трудно назначить их в IDE.
Одним из них является 1588447162117, который отображается как 020-05-02 20:19:53.948 на панели инструментов с использованием JSON.
Вот код, который у меня есть для получения данных из JSON:
#include <ArduinoJson.h>
void setup() {
Serial.begin(4800);
const char* input = "{TotalCases:3308678,TotalCasesToday:4458,TotalDeaths:234123,TotalDeathsToday:293,TotalRecovered:1042991,TotalTerritories:124,CurrentUpdatedMS:1588312648603,CurrentChangedMS:1588312648603}";
StaticJsonDocument<512> doc;
DeserializationError err = deserializeJson(doc, input);
if (err) {
Serial.print("Error: ");
Serial.println(err.c_str());
return;
}
unsigned long TotalCases = doc["TotalCases"];
unsigned long TotalCasesToday = doc["TotalCasesToday"];
unsigned long TotalDeaths = doc["TotalDeaths"];
unsigned long TotalDeathsToday = doc["TotalDeathsToday"];
unsigned long TotalRecovered = doc["TotalRecovered"];
unsigned long TotalTerritories = doc["TotalTerritories"];
unsigned long CurrentUpdatedMS = doc["CurrentUpdatedMS"];
unsigned long CurrentChangedMS = doc["CurrentChangedMS"];
Serial.print("Total Cases: ");
Serial.println(TotalCases);
Serial.print("Total Cases Today: ");
Serial.println(TotalCasesToday);
Serial.print("Total Deaths: ");
Serial.println(TotalDeaths);
Serial.print("Total Deaths Today: ");
Serial.println(TotalDeathsToday);
Serial.print("Total Recovered: ");
Serial.println(TotalRecovered);
Serial.print("Total Territories: ");
Serial.println(TotalTerritories);
Serial.print("Update time in ms:");
Serial.println(CurrentUpdatedMS);
Serial.print("Change time in ms:");
Serial.print(CurrentChangedMS);
}
void loop()
{
}
**Serial monitor output**
Total Cases: 3308678
Total Cases Today: 4458
Total Deaths: 234123
Total Deaths Today: 293
Total Recovered: 1042991
Total Territories: 124
Update time in ms:0
Change time in ms:0
Должно быть хорошо манипулировать им, как только я смогу работать с ним в переменной.
Спасибо за любой вклад,
Шейн
@Lifesigns, 👍1
Обсуждение1 ответ
Я не пробовал сам, но, просто просмотрев документы, я предлагаю вам попробовать:
- Добавление
#define ARDUINOJSON_USE_LONG_LONG 1
вверху скетча, перед включением ArduinoJson.h.
- Объявите
CurrentUpdatedMS
иCurrentUpdatedMS
какunsigned long long
илиuint64_t
.
ОБНОВЛЕНО: Чтобы ответить на вопрос в комментарии:
Когда вы сказали, что просматривали документы, где вы это проверяли?
Мне пришлось следовать (не очень простому) пути: руководство по десериализации →
JsonDocument::operator[] → JsonVariant →
JsonVariant::as<T>(). На этой последней странице указано, что метод
as<unsigned long long>()
«может потребоваться ARDUINOJSON_USE_LONG_LONG».
К сожалению, макрос не связан, поэтому я должен искать его и
найдено ARDUINOJSON_USE_LONG_LONG
.
Спасибо, теперь у меня все работает, и я обработаю это так. Когда вы сказали, что просматривали документы, где вы проверяли? Просто чтобы знать, куда смотреть в будущем., @Lifesigns
Привет. Это сработало хорошо, поскольку я мог присвоить значение, хотя это временная метка UNIX, которая не отображается правильно при печати или отображении на OLED. Пробовал пару вещей, чтобы исправить это, включая приведение к long, u_int 64 и т. д., но все равно возвращает неправильное время. Мои данные обновлены в MS как 13 цифр, тогда как я должен быть в состоянии обработать 10. Буду признателен за любые мысли, которые я пробовал различные варианты. Есть ли способ преобразовать этот объект в JSON в строку?, @Lifesigns
- NodeMCU (Arduino IDE) «DynamicJsonBuffer» не был объявлен в этой области
- Цикл foreach Arduino JSON
- ESP8266 SPIFFS не сохраняется правильно?
- Не могу скомпилировать .ino с помощью библиотеки ArduinoJson
- Чтение и запись в JSON-файл с Arduino?
- Второй элемент в массиве не назначается из объекта структуры, ArduinoJson
- Глобальный JsonObject (ArduinoJson)
- Ошибка синтаксического анализа библиотеки ArduinoJson
в чем именно ваш вопрос?, @jsotola
Я думаю, вы хотите использовать uint64_t, но в зависимости от вашего оборудования это может быть невозможно., @Codebreaker007
Какую библиотеку JSON вы используете? Как вы закодировали чтение значения? Обратите внимание, что это число составляет примерно 2 ^ 40,53, поэтому оно не умещается в 32 бита. Но это произойдет, если вы отбросите последние 3 цифры, что уменьшит разрешение до одной секунды., @Edgar Bonet
Пожалуйста, покажите свой код, @chrisl
это число шестнадцатеричное 171D6D42F05... оно умещается в 64 бита, @jsotola
Разве это не длинные 32 бита на большинстве Arduinos? Какие платы Arduino поддерживают 64-битные целые числа?, @Duncan C
Любой. Дело не в плате. Это зависит от компилятора. Правление определяет, насколько *эффективно* оно их обрабатывает. Любая плата может использовать uint64_t., @Majenko
Честная оценка. Раньше я писал код 6502, где все, что превышает 8 бит, требовало ручного переноса и тому подобное. Современный компилятор позаботится об этом за вас за счет снижения производительности., @Duncan C
JSON слишком сложен для встроенных целей по сравнению с гораздо более полезной C++
struct
. Почему вы используете JSON вместо чего-то вроде структуры?, @P_B