Я пытаюсь разобрать простые данные JSON в Qt5.
Код выглядит так:
...
socket->readDatagram(Buffer.data(),Buffer.size(),&sender,&senderPort);
QJsonParseError jsonError;
QJsonDocument dataJson = QJsonDocument::fromJson(Buffer.data(),&jsonError);
if (jsonError.error != QJsonParseError::NoError){
qDebug() << jsonError.errorString();
}
QJsonObject map = dataJson.object();
//map["x"].toDouble()
Но почему-то у меня карта пустая, вот отладочная снапка:
Как я могу решить это?
Данные :
'{\"x\":1,\"y\":2,\"z\":3}'
Я проверил ваш фрагмент кода, и он сработал для меня! Убедитесь, что ваш буфер заполнен, когда десериализатор JSON начнет работать. Не полагайтесь на выходные данные отладки, добавьте вывод консоли и проверьте это.
Предполагая, что вы читаете правильно, вы должны проверить с помощью такой команды:
echo -n \{\"x\":1,\"y\":2,\"\z\":3\} > /dev/udp/127.0.0.1/8080
Итак, избавьтесь от одинарных кавычек и экранируйте фигурные скобки.
Еще лучше: поместите данные json в файл myfile
и используйте cat myfile > /dev/udp/127.0.0.1/8080
это сработало, но можете ли вы объяснить мне, как это сработало?
в вашем коде нет ничего плохого, я думаю, это скорее проблема с bash
Только один вопрос, почему не работает отправка данных на 192.168.0.108
?
Это зависит от того, как вы привязываетесь (и от правильного адреса). Попробуйте udpSocket.bind(QHostAddress::Any, 8080);
или udpSocket.bind(8080);
, что то же самое.
Я пробовал Any
, AnyIPv4
, жестко запрограммировал 192.168.0.108
все, но не работает
Я думаю, вы можете опубликовать новый вопрос об этом (если вы абсолютно уверены, что адрес правильный). Просто опубликуйте вывод ip address
в вопросе, возможно, не в виде изображения :) и, возможно, опубликуйте достаточно кода, чтобы иметь минимальный воспроизводимый пример, просто чтобы избежать отрицательных голосов.
на самом деле я сделал, 5 часов назад: stackoverflow.com/questions/65232467/…
Вы читаете из слота readyRead
? Я думаю, вам действительно следует опубликовать больше кода.
Вы должны увидеть, что ваш журнал печатает строку ошибки json в выходных данных приложения Qt Creator, потому что вызов fromJson явно не удался. И если синтаксический анализ не удался, вы не должны продолжать выполнение своей функции, но, например. вернуться из него. Я подозреваю, что экранирование строки json идет не так. Что, если вы замените одинарные кавычки двойными в эхо-вызове?