Проблема: не получается правильно распарсить json, приходящий по последовательному порту на Ардуино: не выходит достать двухмерный массив из последнего элемента json'на. Железо: Ардуино Уно. Вопрос: Как можно распарсить двухмерный массив из json объекта? Код, отвечающий за парсинг: StaticJsonDocument<256> doc; // Используем StaticJsonDocument с размером 256 байт DeserializationError error = deserializeJson(doc, input); if (error) { Serial.print("parse error"); return; } int task_id = doc["task_id"]; int slave_id = doc["slave_id"]; int num_tasks = doc["num_tasks"]; //Serial.print(num_tasks); //Serial.print("id check"); if (slave_id != SLAVE_ID){ Serial.print("not_my_id"); return;} //Serial.print("data parse start"); char data[num_tasks][3] = doc["data"]; //for(int g=0;g<6;g++){Serial.print(data[g]);} float results[num_tasks]; for (int i = 0; i < num_tasks; i++) { //Serial.println(i); // Извлечение операции и операндов const char* op = //data[3 + i * 3]; // Явное преобразование в const char* //Serial.println(op); float operand1 = data[4 + i * 3]; //Serial.println(operand1); float operand2 = data[5 + i * 3]; //Serial.println(operand2); // Обработка операций
Комментарии: 9
Crash
Чат гопоты писал? Очень похоже, сам употребляю по мелочам
Andrey
Зачем вам JSON, не проще ли было пулять данные в виде "ключ,значение" ?
Sous
Там таких массивов может быть кучей, и это самостоятельные задачи. Вот прримерр пакета: {"task_id": 1,"slave_id": 1,"num_tasks": 3,"data":[["a", 12.5, 7.5],["s", 20.0, 5.0],["m", 3.0, 4.0]]}
Andrey
Так может МК отдавать не такую кучу, а готовые данные? Зачем ему заниматься этой мешаниной и каждый раз прошиваться после малейшего изменения формата данных. если сервис не ваш, сделайте промежуточную прослойку которая примет и передаст рабочий варик
Sous
Нет, ну это уже не смешно. Список мутвордов можно? Нет, всё полностью моё, пишу с нуля. И тут прослойка распределяет задачи между вычислителями. Я просто не знаю, как лучше сделать, пришёл к этому ответу.