Parsing JSON in Qt
Qt ha già tutti gli strumenti per eseguire il parsing di stringhe JSON.
Partendo da questo articolo, dove abbiamo visto come eseguire un richiesta ad un server remoto, vediamo come eseguire il parsing della risposta.
Se volete vedere com'è strutturato il JSON, potete accedere liberamente all'indirizzo che interroghiamo, che è questo: http://www.hardstyleitalia.com/blog/api/get_posts/?nopaging=true/
A questo punto creiamo una classe apposita che si chiamerà, con molta fantasia, JsonParser.
Questo il file di intestazione:
// jsonparser.h
#ifndef JSONPARSER_H
#define JSONPARSER_H
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QByteArray>
#include <QStringList>
#include <QTextDocument>
#include <QDebug>
class JsonParser
{
public:
JsonParser(QByteArray json);
~JsonParser();
QStringList getPosts();
QString getCountPosts();
private:
QJsonDocument jsonResponse;
QJsonObject jsonObject;
};
#endif // JSONPARSER_H
Questo invece il file di implementazione:
// jsonparser.cpp
#include "jsonparser.h"
JsonParser::JsonParser(QByteArray json)
{
jsonResponse = QJsonDocument::fromJson(json);
jsonObject = jsonResponse.object();
}
JsonParser::~JsonParser()
{
}
QStringList JsonParser::getPosts()
{
QStringList list;
QJsonArray jsonArray = jsonObject["posts"].toArray();
foreach (const QJsonValue & value, jsonArray) {
QJsonObject obj = value.toObject();
QTextDocument doc;
doc.setHtml(obj["title"].toString());
list.append(doc.toPlainText() + " - " + QString::number(obj["id"].toDouble()));
doc.clear();
}
qDebug() << list;
return list;
}
QString JsonParser::getCountPosts()
{
double dc = 0;
QJsonValue val = jsonObject.value("count_total");
if (val.isDouble())
{
dc = val.toDouble();
}
QString count = QString::number(dc);
return count;
}
Abbiamo due metodi:
- con uno prendiamo i dati e riempiamo una QStringList
- con l'altro prendiamo un campo specifico della stringa per vedere quanti articoli sono stati scritti (io ho poi messo questi dati in una QStatusBar
Le classi che vi interessano di più sono:
Enjoy!
qt json qjsonarray qjsondocument qjsonobject qstringlist
Commentami!