我有一个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