将Json字符串作为输入的以下Qt QStrings之间有什么区别?使用QTcpSockets

时间:2017-05-31 16:03:31

标签: json qt qstring qtcpsocket qjson

我有一条通过QTcpSocket发送的json消息。在发送消息之前,Json消息的格式如下:

案例1:

//Heartbeat = QString("{\"messageType\":\"Heartbeat\", \"Thread_Name\":%1, \"Heartbeat\":%2}").arg(Thread_Name).arg(HbCount);  //clients Heartbeat

案例2:`

Heartbeat = QString("{ \
                    \"messageType\":\"Heartbeat\",\
                    \"Thread_Name\":\"%1\", \
                    \"Heartbeat\":%2 \
                   }").arg(Thread_Name).arg(HbCount);  //clients Heartbeat

当QString准备就绪时,它通过QTcpSocket传输,如下所示:

_pSocket->write(Heartbeat.toLatin1());
_pSocket->flush();
_pSocket->waitForBytesWritten();

在接收端,套接字能够在两种情况下接收数据。但是当使用QJsonDocument解析接收到的数据时,Case 1无法提供空的json doc,其中Case 2的工作原理是提供所需的JsonDoc。

这是接收端代码:

QByteArray Data = socket->readAll(); //read data from socket in to a QByteArray

QJsonDocument JsonDoc = QJsonDocument::fromJson(Data); //convert QByteArray to QJsonDocument

两种情况有什么区别? 两者之间的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

在第一种情况下,%1正在使用字符串参数。但是周围缺少行情。当我在下面添加引号时,它的工作正常。

Heartbeat = QString("{\"messageType\":\"Heartbeat\", \"Thread_Name\":\"%1\", \"Heartbeat\":%2}").arg(Thread_Name).arg(HbCount);