Работа с JSON со стороны QT

QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender()); if (reply->error() == QNetworkReply::NoError) { // Ниже кусок кода, выводящий в textEdit содержимое полученное с сайта. // QByteArray content= reply->readAll(); // Получаем содержимое ответа // Реализуем преобразование кодировки (зависит от кодировки сайта) // QTextCodec *codec = QTextCodec::codecForName(«windows-1251»); // ui->textEdit->setPlainText(codec->toUnicode(content.data()) ); // Выводим результат // А вот тут уже работа с JSON QJsonDocument document = QJsonDocument::fromJson(reply->readAll()); QJsonObject root = document.object(); ui->textEdit->append(QString::number(root.value(«type»).toInt())); ui->textEdit->append(QString::number(root.value(«numOfPins»).toInt())); QJsonValue jv = root.value(«pin»); QJsonArray ja = jv.toArray(); for(int i = 0; i < ja.count(); i++){ QJsonObject subtree = ja.at(i).toObject(); //Берем подмассив и распарсим его по названиям значений //ui->textEdit->append(QString::number(i)+» = «+QString::number(ja[i].toInt())); // Вот так можно взять строчку из массива ui->textEdit->append(subtree.value(«type»).toString() + » » + subtree.value(«name»).toString()+ » » + subtree.value(«value»).toString()); } } else { ui->textEdit->setPlainText(reply->errorString());// Выводим описание ошибки, если она возникает. } reply->deleteLater(); // разрешаем объекту-ответа «удалится» }

Работа с JSON со стороны Arduino

  #include <ArduinoJson.h> StaticJsonDocument<500> doc; // Количество элементов в дереве json doc[«type»]=1; //Добавляем значение поле type и значение «1» doc[«numOfPins»]=6; // То же самое // А вот тут интереснее. Создаем массив векторов «pin». В каждом векторе может // быть сколько угодно пар JsonArray pinTypes = doc.createNestedArray(«pin»); Прописываем значения для каждого элемента массива. pinTypes[0][«type»]=»INPUT»; pinTypes[0][«name»]=»D3″; pinTypes[0][«value»]=String(digitalRead(0)); // А здесь зачем конвертить в String ? Не знаю. Но когда парсится массив, то //QT не может по-человечески вытащить это значение. А из String легко. pinTypes[1][«type»]=»RESERVED»; pinTypes[1][«name»]=»TX»; pinTypes[1][«value»]=0; // И так далее String jsonDoc; // Библиотека может серилизовать прямо в поток, например //  serializeJson(doc, Serial); Но мне нужно писать по-хитрому, serializeJson(doc, jsonDoc); // Поэтому создаем временную переменную и… server.send(200, «text/html», jsonDoc); // отправляем ее клиенту.