Question: I have a QMap object and I would like to convert it to JSON. I am confused how I would accomplish this. 

I read QT documentation saying that I can use QDataStream to convert QMap to JSON, but QDataStream seems to convert files: <http://doc.qt.io/qt-4.8/datastreamformat.html>

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

```

Answer: 
It would be easiest to convert the map to `QVariantMap` which can automatically be converted to a JSON document:

```
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);

```

The same thing can be used to create a `QJsonObject` if you want, via the `QJsonObject::fromVariant()` static method. Although for `QJsonObject` you can skip the conversion to variant map step and simply populate the object manually as you iterate the map:

```
QMap<QString, int> myMap;
QJsonObject json;

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

```
If you are using Qt 5.5 or higher you could use [QJsonDocument::fromVariant](http://doc.qt.io/qt-5/qjsondocument.html#fromVariant), your map could be converted easily to a [QVariantMap](http://doc.qt.io/qt-5/qvariant.html). If not, try [QJson](http://qjson.sourceforge.net/)

For your purpose, you are looking for QMAP serialization, see this link: [Serialization Qt](http://doc.qt.io/qt-5/datastreamformat.html). Try to set up the constructor with a [QByteArray](http://doc.qt.io/qt-5/qdatastream.html#QDataStream-2), something like this:

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

```

That's, will serialize your map in a QByteArray wich could be easily converted to a QString or std::string.