Json http response, оператор if else

#c #json

#c #json

Вопрос:

Я НЕ МОГУ ИЗМЕНИТЬ ОТВЕТ JSON, ПОКАЗАННЫЙ НИЖЕ.

Я хочу иметь возможность определять, когда сообщение POST было успешно введено в базу данных. Когда данные успешно введены, ответ:

{«статус»: «успех», «сообщение»: «успешно вставлено»}

Затем я хочу использовать оператор if-else в Arduino, чтобы определить, когда это получено с сервера. Итак, мой код будет выглядеть примерно так:

 while(client.available()) 
{
    String line = client.readStringUntil('n');
    Serial.print(line);

    Serial.print("n");

    if(line == "{"status":"success","message":"successfully inserted"}")
    {
      update_var  ;
      Serial.print("SUCCESSFUL");
      break;
    }

    else
    {
      Serial.print("UNSUCCESSFUL");
    }
    
}
 

Однако в операторе if сразу возникает проблема. Это связано с тем, что кавычки также появляются в строке. Как мне использовать оператор if-else при получении ответа JSON?

Комментарии:

1. Вы можете экранировать внутренние кавычки с помощью . Вместо «do «. Однако это ошибка. На самом деле вам следует выполнить некоторый синтаксический анализ JSON, что немного сложнее.

2. en.cppreference.com/w/cpp/language/escape

3. @M-Chen-3 Это недопустимо в C .

4. @tadman Чувак, я был избалован Python. Спасибо за напоминание.

5. Не связано: является String String ли класс Arduino? Если это так, я рекомендую установить Arduino STL и использовать std::string вместо этого. В нем также есть много других полезных функций, таких как std::vector etc. Это значительно упрощает жизнь.

Ответ №1:

Это просто требует экранирования, если вы тестируете буквально:

 if (line == "{"status":"success","message":"successfully inserted"}")
 

Имейте в виду, что это может так же легко поменять местами ключи, нет никакой гарантии, что они будут в таком порядке. Вот почему использование правильного синтаксического анализатора JSON является обязательным.

Комментарии:

1. Я не могу изменить строку JSON, полученную с сервера. Итак, что я получаю: {«статус»: «успех», «сообщение»: «успешно вставлено»}. Я не могу пойти и вставить в это дополнительные символы.

2. Это не имеет абсолютно никакого отношения к строке, полученной с сервера, и все связано с тем, как представить эту строку в C . В строке с двойными кавычками обратная косая черта имеет особое значение, поэтому "A "quoted" string" на самом деле, с точки зрения символов , просто A "quoted" string . Способ представления одного символа в двойных кавычках внутри строки C , как всегда, " .

3. Итак, как мне вставить часть » в полученную строку?

4. «Итак, как мне вставить часть » в полученную строку?» Я понимаю, насколько глупым был этот комментарий. Извините, если это вас расстроило….. Ваш ответ работает!

5. Изучение новых вещей в основном расстраивает, но когда вы это понимаете, оно того стоит!

Ответ №2:

Я рекомендую использовать библиотеку JSON для синтаксического анализа JSON, но если это не вариант, я рекомендую сравнить ваш String с необработанным строковым литералом (опция 6 в ссылке), чтобы избежать экранирования любого символа:

 if(line == R"aw({"status":"success","message":"successfully inserted"})aw") {
    // ...
}