ArduinoJson проверка на существования поля

Casper17
Offline
Зарегистрирован: 21.06.2013

Подскажите пожалуйста, как можно проверить, существует ли данное поле в json ответе? Приходит динамическая строка json с настройками. Может прилететь как один параметр, так и несколько параметров, как это можно отследить?

Logik
Offline
Зарегистрирован: 05.08.2014

Парсить, смотреть что прилетело. Можно попробовать угадать. Очень странный вопрос. Может тему для новичков сразу почитать?

negavoid
Offline
Зарегистрирован: 09.07.2016

В библиотеке ArduinoJson нет примера enumeration, везде сразу берут захардкоженные имена полей, поэтому мы ещё долго будем видеть такие вопросы. :)

char json[] = "{\"first\":\"hello\",\"second\":\"world\"}";
DynamicJsonDocument doc(1024);
deserializeJson(doc, json);
JsonObject root = doc.as<JsonObject>();

for (JsonPair kv : root) {
    Serial.println(kv.key().c_str());
    Serial.println(kv.value().as<char*>());
}

 

Алексей.
Алексей. аватар
Offline
Зарегистрирован: 02.02.2018

Для версии библиотеки 5.x /src/ArduinoJson/JsonObject.hpp
 

// Tells weither the specified key is present and associated with a value.
//
// bool containsKey(TKey);
// TKey = const std::string&, const String&
template <typename TString>
bool containsKey(const TString& key) const {
  return findKey<const TString&>(key) != end();
}

Для версии 6.x уже в ObjectRef.hpp, аналогично containsKey с той-же сигнатурой.

negavoid
Offline
Зарегистрирован: 09.07.2016

во, аж целая есть функция ))

и бук вообще полезный, только кто ж его читать из новичков будет