对象的 QJsonDocument 为空

Posted

技术标签:

【中文标题】对象的 QJsonDocument 为空【英文标题】:QJsonDocument to object is empty 【发布时间】:2020-12-10 05:19:09 【问题描述】:

我正在尝试在 Qt5 中解析一个简单的 JSON 数据。

代码如下所示:

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

【问题讨论】:

您应该在 Qt Creator 的应用程序输出中看到有关 json 错误字符串的日志打印,因为 fromJson 调用显然没有成功。如果解析失败,你不应该继续执行你的函数,但是例如从它返回。我怀疑你的 json 字符串转义出错了。如果在 echo 调用中将单引号替换为双引号会怎样? 我已经测试了你的代码,它对我有用!当 JSON 反序列化器开始工作时,请确保您的缓冲区已满。不要依赖调试输出,添加一些控制台打印并检查。 【参考方案1】:

假设您阅读正确,您应该使用如下命令进行测试:

echo -n \\"x\":1,\"y\":2,\"\z\":3\ &gt; /dev/udp/127.0.0.1/8080

所以,去掉单引号并转义大括号。

更好的是:将您的 json 数据放入 myfile 文件并使用 cat myfile &gt; /dev/udp/127.0.0.1/8080

【讨论】:

这行得通,但你能告诉我它是如何工作的吗? 你的代码没什么问题,我认为更多的是 bash 问题 只有一个问题,为什么发送数据到192.168.0.108 不起作用? 这取决于您如何绑定(以及地址是否正确)。试试udpSocket.bind(QHostAddress::Any, 8080); 或者udpSocket.bind(8080);,都是一样的。 我试过AnyAnyIPv4,硬编码192.168.0.108一切,但不起作用

以上是关于对象的 QJsonDocument 为空的主要内容,如果未能解决你的问题,请参考以下文章

转载:使用 QJsonDocument 处理 JSON

Qt 和 JSON 资源解析 - 空 QJSONDocument

QJsonDocument::array() 和 QJsonDocument::object()

Microsoft JScript运行时错误 document.images.slide.filters为空或不是对象

如何将 QJsonDocument 保存并加载到文件中?

QJsonDocument - 获取缩进的值