gpt4 book ai didi

c++ - 如何将pusher.com的 "serialized"json解析成qt5 QJsonDocument?

转载 作者:太空宇宙 更新时间:2023-11-04 13:38:09 28 4
gpt4 key购买 nike

我在我的 qt5 应用程序中从 pusher.com WebSocket 获取一些 json 数据,我正在努力解析他们发送的“序列化”json。我终于确定了问题所在,但不确定如何解决:

我做了一个小测试程序来演示:

QString str1 = "{\"event\":\"message\",\"data\":\"{\\\"channel\\\":\\\"trade.3\\\",\\\"trade\\\":{\\\"tradeid\\\":\\\"86364698\\\",\\\"timestamp\\\":1425420405,\\\"datetime\\\":\\\"2015-03-03 17:06:45 EDT\\\",\\\"marketid\\\":\\\"3\\\",\\\"marketname\\\":\\\"LTC\\\\/BTC\\\",\\\"quantity\\\":\\\"0.24680554\\\",\\\"price\\\":\\\"0.00694988\\\",\\\"total\\\":\\\"0.00171527\\\",\\\"type\\\":\\\"Buy\\\"}}\",\"channel\":\"trade.3\"}";

QString str2="{\"event\":\"message\",\"data\": {\"channel\":\"trade.3\",\"trade\":{\"tradeid\":\"86364698\",\"timestamp\":1425420405,\"datetime\":\"2015-03-03 17:06:45 EDT\",\"marketid\":\"3\",\"marketname\":\"LTC\\/BTC\",\"quantity\":\"0.24680554\",\"price\":\"0.00694988\",\"total\":\"0.00171527\",\"type\":\"Buy\"}},\"channel\":\"trade.3\"}";

QJsonDocument doc1 = QJsonDocument::fromJson(str1.toUtf8());
QJsonDocument doc2 = QJsonDocument::fromJson(str2.toUtf8());

qDebug("%s", qPrintable(QString("Str1: \"%1\"").arg(str1)));
qDebug("%s", qPrintable(QString(doc1.toJson())));
qDebug() << "-----------------------------------------------------------";
qDebug("%s", qPrintable(QString("Str2: \"%1\"").arg(str2)));
qDebug("%s", qPrintable(QString(doc2.toJson())));

这个输出:

Str1: "{"event":"message","data":"{\"channel\":\"trade.3\",\"trade\":{\"tradeid\":\"86364698\",\"timestamp\":1425420405,\"datetime\":\"2015-03-03 17:06:45 EDT\",\"marketid\":\"3\",\"marketname\":\"LTC\\/BTC\",\"quantity\":\"0.24680554\",\"price\":\"0.00694988\",\"total\":\"0.00171527\",\"type\":\"Buy\"}}","channel":"trade.3"}"
{
"channel": "trade.3",
"data": "{\"channel\":\"trade.3\",\"trade\":{\"tradeid\":\"86364698\",\"timestamp\":1425420405,\"datetime\":\"2015-03-03 17:06:45 EDT\",\"marketid\":\"3\",\"marketname\":\"LTC\\/BTC\",\"quantity\":\"0.24680554\",\"price\":\"0.00694988\",\"total\":\"0.00171527\",\"type\":\"Buy\"}}",
"event": "message"
}

-----------------------------------------------------------
Str2: "{"event":"message","data": {"channel":"trade.3","trade": {"tradeid":"86364698","timestamp":1425420405,"datetime":"2015-03-03 17:06:45 EDT","marketid":"3","marketname":"LTC\/BTC","quantity":"0.24680554","price":"0.00694988","total":"0.00171527","type":"Buy"}},"channel":"trade.3"}"
{
"channel": "trade.3",
"data": {
"channel": "trade.3",
"trade": {
"datetime": "2015-03-03 17:06:45 EDT",
"marketid": "3",
"marketname": "LTC/BTC",
"price": "0.00694988",
"quantity": "0.24680554",
"timestamp": 1425420405,
"total": "0.00171527",
"tradeid": "86364698",
"type": "Buy"
}
},
"event": "message"
}

显然第二个版本是我的目标。有没有一种方法可以轻松转换输入数据,或者我是否必须尝试使用​​自己的转换器函数?

编辑:以下是针对这个特定数据样本的技巧......但我仍然认为必须有更合适的方法来转换这类东西......

str1.replace("\\\"", "\"");
str1.replace("\\\\", "\\");
str1.replace("\"{", "{");
str1.replace("}\"", "}");

最佳答案

您的“数据”实际上是另一个 JSON 文档。

只需从 doc1.object()["data"].toString(); 创建另一个 QJsonDocument;

但很明显“数据”可以有其他东西,在这个例子中它是一个 json 文档。

祝你好运!

关于c++ - 如何将pusher.com的 "serialized"json解析成qt5 QJsonDocument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28844116/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com