#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") {
// ...
}