2017-04-18 127 views
1

我有一個QMap對象,我想將它轉換爲JSON。我很困惑我會如何實現這一點。將QMap轉換爲JSON

我閱讀Qt文檔說,我可以使用QDataStream來QMAP轉換成JSON,但QDataStream似乎轉換文件:http://doc.qt.io/qt-4.8/datastreamformat.html

// c++ 
QMap<QString, int> myMap; 
+0

你打開一個'QFile',使用作爲參數來構建一個新的'QDataStream',然後使用'<<'運算符來序列化'myMap'。 – rwols

回答

4

這將是最簡單的地圖轉換爲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()); 
}  
+0

這將不支持JSON樹層次結構。所有節點將在一個級別。 –

+0

@DmitrySazonov - 地圖不是樹。 – dtech

+0

我的意思是,當你有一個變體的地圖,其中variant可能是一個值或另一個地圖。 –

1

如果您使用的是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 ::字符串。