2017-04-18 124 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 ::字符串。