Как я могу отделить значения от полной строки, входящая строка всегда меняет свои позиции?
String str = {"timestamp": "2023-02-08 16-37-31" ,"cpcb_device": [{"Station" : "832","Para": [{"tag_name": "COD","tag_value": "35.5","tag_unit": "mg/l"},{"tag_name": "BOD","tag_value": "13.7","tag_unit": "mg/l"},{"tag_name": "TSS","tag_value": "24.8","tag_unit": "mg/l"},{"tag_name": "pH","tag_value": "6.5","tag_unit": "pH"}]}]}
@Karan Bawadekar, 👍-1
Обсуждение1 ответ
▲ 0
Вы можете использовать substring() и indexOf() для получения частей строки в определенных позициях. например:
String test = "timestamp: 123 value: test";
int val = test.indexOf("timestamp:"); //дает вам индекс начала "отметки времени:"
int start = test.indexOf(" ", val)+1; // получить индекс пространства, начиная с нашего индекса 'val'
int end = test.indexOf(" ", start); // получаем индекс следующего пробела, мы добавили 1 к предыдущему значению, чтобы он не занимал первый пробел
timestamp = test.substring(start, end); // получить символы между этими двумя значениями индекса
Попробуйте и посмотрите, как это работает для вас, очевидно, получая индекс разделительных символов, который имеет больше смысла, например, запятую или двоеточие, а не пробел.
Также вы можете сделать это так:
String search = "timestamp:";
int start = test.indexOf(search)+search.length();
//etc...
,
@Roman
Смотрите также:
- Как преобразовать форматированный оператор print в строковую переменную?
- Преобразование строки в IP-адрес
- Как прочитать входящие ШЕСТНАДЦАТИРИЧНОЕ значение из serial метод read ()?
- Использование c_str() для String для IPAddress с NTPClient дает неправильные значения
- Каков наилучший способ преобразования std::string в строку?
- Предотвращает ли toCharArray создание строки в куче?
- Инициализатор ошибок-строка для массива символов слишком длинная с использованием веб-сервера ESP32
- ESP32 Невозможно присвоить значение строке. Получение неправильного значения
это похоже на формат JSON. попробуйте библиотеку ArduinoJson, @Juraj
Используя json, он показывает ошибку дереализации, потому что строка каждый раз меняется со своей позиции, @Karan Bawadekar
что такое "каждый раз менялся со своей позиции"?, @Juraj
Входная строка изменена как POST/HTTP/1.1 Хост: 192.168.0.197 Агент пользователя: libcurl-agent/1.0 Принимать: */* Длина контента: 144 Content-Type: application/x-www-form-urlencoded {"timestamp": "2023-02-08 16-37-33", "cpcb_device": [{"Station" : "833","Para": [{"tag_name": "Flow","tag_value": "2.0","tag_unit": "м3/ч"}]}]}, @Karan Bawadekar
использовать библиотеку HTTPClient для запроса POST, @Juraj
Пожалуйста, скажите мне, как десериализовать эти данные json, мне нужны только значения, поэтому как отделить значения от этой входящей строки, @Karan Bawadekar
библиотека HTTPClient сделает это, @Juraj
String str = {"timestamp": "2023-02-08 16-37-31" };
возвращает **ошибка: ожидается ',' или ';' перед токеном ':'** исправьте., @DataFiddler