Let's extend the PlayerInfoJSON
class and equip it with a reverse conversion:
PlayerInfo PlayerInfoJSON::readPlayerInfo(const QByteArray &ba) const { QJsonDocument doc = QJsonDocument::fromJson(ba); if(doc.isEmpty() || !doc.isArray()) return PlayerInfo(); return readPlayerInfo(doc.array()); }
First, we read the document and check whether it is valid and holds the expected array. Upon failure, an empty structure is returned; otherwise, readPlayerInfo
is called and is given QJsonArray
to work with:
PlayerInfo PlayerInfoJSON::readPlayerInfo(const QJsonArray &array) const { PlayerInfo pinfo; foreach(QJsonValue value, array) pinfo.players << readPlayer(value.toObject()); return pinfo; }
Since the array is iterable, we can again use foreach
to iterate it and use another method—readPlayer
—to extract all the needed data:
Player PlayerInfoJSON::readPlayer(const QJsonObject &object) const { Player player; player.name = object...