老司机最近又有Qt项目了
1、QMap与Json字符串
// serialize:
QMap<QString, QVariant> maps;
maps.insert("a", "0.98");
maps.insert("libType", "1");
maps.insert("somestr", "hello");
QJsonDocument serialize = QJsonDocument::fromVariant(QVariant(maps)); // 差异
QString json = QString(serialize.toJson(QJsonDocument::Indented));
qDebug() << json << endl;
// deserialize:
QJsonDocument deserialize = QJsonDocument::fromJson(json.toUtf8());
QJsonObject jsonObj = deserialize.object();
qDebug()
<< jsonObj.value("a").toVariant().toString()
<< jsonObj.value("libType").toVariant().toString()
<< jsonObj.value("somestr").toVariant().toString()
<< endl;
2、QJsonObject与Json字符串
QJsonObject maps;
maps.insert("a", 0.98);
maps.insert("libType", 1);
maps.insert("somestr", "hello");
QJsonDocument doc = QJsonDocument(maps); // 差异
QString json = QString(doc.toJson(QJsonDocument::Indented));
qDebug() << json << endl;
QJsonDocument deserialize = QJsonDocument::fromJson(json.toUtf8());
QJsonObject jsonObj = deserialize.object();
qDebug()
<< jsonObj.value("a").toVariant().toString()
<< jsonObj.value("libType").toVariant().toString()
<< jsonObj.value("somestr").toVariant().toString()
<< endl;
}
3、坑
如果a的值不是QString类型,得到的value将为空且不报错
QString value = jsonObject.value("a").toString(); // value是空的对于非QString类型的a的值,比如浮点、整型
正确做法是用toVariant().toString()
QString value = jsonObject.value("a").toVariant().toString(); // 如果a的值不是QString类型,要先加toVariant()