Как я могу отделить значения от полной строки, входящая строка всегда меняет свои позиции?

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"}]}]}

, 👍-1

Обсуждение

это похоже на формат 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


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...
,