将 QMap 转换为 JSON

Convert QMap to JSON

我有一个 QMap 对象,我想将它转换为 JSON。我很困惑我将如何做到这一点。

我阅读了 QT 文档说我可以使用 QDataStream 将 QMap 转换为 JSON,但 QDataStream 似乎转换文件:http://doc.qt.io/qt-4.8/datastreamformat.html

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

如果您使用的是 Qt 5.5 或更高版本,您可以使用 QJsonDocument::fromVariant, your map could be converted easily to a QVariantMap. If not, try QJson

为了您的目的,您正在寻找 QMAP 序列化,请参阅此 link:Serialization Qt. Try to set up the constructor with a QByteArray,如下所示:

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

也就是说,将在 QByteArray 中序列化您的地图,它可以很容易地转换为 QString 或 std::string。

将地图转换为 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::fromVariant() 静态方法创建 QJsonObject。尽管对于 QJsonObject 您可以跳过转换为变体映射的步骤并在迭代映射时简单地手动填充对象:

QMap<QString, int> myMap;
QJsonObject json;

QMapIterator<QString, int> i(myMap);
while (i.hasNext()) {
    i.next();
    json.insert(i.key(), i.value());
}