Выборочный парсинг json

w2den777
Offline
Зарегистрирован: 28.02.2016

Добрый день! Получаю в топик разный json формата {"temp":"value"} и {"hum":"value"}. Проблема в том что обработчик зануляет значение value у hum если отправлен json temp и наоборот. Как так сделать, что бы обработчик проверил наличие и не трогал значения если они не пришли.

DynamicJsonBuffer  jsonBuffer;
JsonObject& json = jsonBuffer.parseObject(payload);
temp = json["set_temperature"];
hum = json["hum1"];

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

sadman41
Offline
Зарегистрирован: 19.10.2016

https://arduinojson.org/v6/api/jsonvariant/containskey/

// проверять наличие 'hum' и брать значение только в том случае, если присутствует ключ.
if (root.containsKey("error")) {   
  const char* error = root["error"]
  Serial.println(error);
  return;
}
Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

А должно быть по другому? Если key-value отсутствует или не корректно, парсер подсовывает default value (0 для данного типа)

 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

sadman41 пишет:

https://arduinojson.org/v6/api/jsonvariant/containskey/

// проверять наличие 'hum' и брать значение только в том случае, если присутствует ключ.
if (root.containsKey("error")) {   
  const char* error = root["error"]
  Serial.println(error);
  return;
}

Пишут, что так будет быстрее:

  const char* error = root["error"]
if (error != nullptr) { 
  Serial.println(error);
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Если результат помещается в указатель, то быстрее. А если в числовую переменную, то nullptr там не не к месту вроде.

w2den777
Offline
Зарегистрирован: 28.02.2016

Работает, тема закрыта спасибо огромное!