将QMAP转换为JSON

Convert QMap to JSON

本文关键字:JSON 转换 QMAP      更新时间:2023-10-16

我有一个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());
}    

如果使用QT 5.5或更高版本,则可以使用qjSondocument :: fromVariant,您的地图可以轻松地转换为qvariantMap。如果没有,请尝试QJSON

出于您的目的,您正在寻找QMAP序列化,请参阅此链接:序列化QT。尝试使用QByTearray设置构造函数,类似的内容:

   QByteArray serializeMap(const QMap<QString, int>& map) {
      QByteArray buffer;
      QDataStream stream(&buffer, QIODevice::WriteOnly);
      out << map;
      return out;
   }

是,将在qbyTearray中序列化您的地图,可以轻松地转换为QString或std :: String。