我有一個QMap對象,我想將它轉換爲JSON。我很困惑我會如何實現這一點。將QMap轉換爲JSON
我閱讀Qt文檔說,我可以使用QDataStream來QMAP轉換成JSON,但QDataStream似乎轉換文件:http://doc.qt.io/qt-4.8/datastreamformat.html
// c++
QMap<QString, int> myMap;
我有一個QMap對象,我想將它轉換爲JSON。我很困惑我會如何實現這一點。將QMap轉換爲JSON
我閱讀Qt文檔說,我可以使用QDataStream來QMAP轉換成JSON,但QDataStream似乎轉換文件:http://doc.qt.io/qt-4.8/datastreamformat.html
// c++
QMap<QString, int> myMap;
這將是最簡單的地圖轉換爲QVariantMap
,可自動轉換爲一個JSON文件:
QMap<QString, int> myMap;
QVariantMap vmap;
QMapIterator<QString, int> i(myMap);
while (i.hasNext()) {
i.next();
vmap.insert(i.key(), i.value());
}
QJsonDocument json = QJsonDocument::fromVariant(vmap);
同樣的事情可以被用來創建一個QJsonObject
如果你想,通過QJsonObject::fromVariant()
靜態方法。雖然QJsonObject
你可以跳過轉換變體地圖步驟,只需手動填充物爲您遍歷地圖:
QMap<QString, int> myMap;
QJsonObject json;
QMapIterator<QString, int> i(myMap);
while (i.hasNext()) {
i.next();
json.insert(i.key(), i.value());
}
這將不支持JSON樹層次結構。所有節點將在一個級別。 –
@DmitrySazonov - 地圖不是樹。 – dtech
我的意思是,當你有一個變體的地圖,其中variant可能是一個值或另一個地圖。 –
如果您使用的是Qt 5.5或更高版本,你可以使用QJsonDocument::fromVariant,地圖可以很容易地轉換爲QVariantMap。如果沒有,請嘗試QJson
爲了您的目的,您正在尋找QMAP序列化,請參閱此鏈接:Serialization Qt。嘗試建立構造一個QByteArray,是這樣的:
QByteArray serializeMap(const QMap<QString, int>& map) {
QByteArray buffer;
QDataStream stream(&buffer, QIODevice::WriteOnly);
out << map;
return out;
}
這就是,將你的序列化映射在QByteArray中至極可以很容易地轉換爲QString或std ::字符串。
你打開一個'QFile',使用作爲參數來構建一個新的'QDataStream',然後使用'<<'運算符來序列化'myMap'。 – rwols