Mengurai (Parsing) JSON Qt4 dengan QJson

Yuk belajar kiti lagi, eh maksudnya Qt (dibaca kyut). Pada tulisan terdahulu tentang Graph API Facebook, saya sudah menerapkan pengurai (parser) JSON dengan Qt 5. Kelas yang digunakan antara lain QJsonDocument, QJsonObject dan QJsonValue. Itu semua ternyata baru ada pada Qt 5. Maka jika saya mengompilasinya dengan qmake-qt4, pasti terjadi error.

Sebagai gantinya, untuk mengolah JSON di Qt 4, kita membutuhkan pustaka QJson yang bisa diunduh dari http://qjson.sourceforge.net/. Jika pembaca menggunakan Qt di Windows, maka harus mengompilasi sendiri. Nah, kalau di Linux, terutama Ubuntu, QJson sudah ada di repositori sejak lama. Cukup instal libqjson0 dan libqjson-dev.

Mungkin tulisan ini sudah terlambat untuk membahas QJson, karena sudah banyak program berbasis Qt 4 yang diporting ke Qt 5. Selain itu, distro-distro Linux sudah mulai berancang-ancang menggunakan Qt 5 juga. Di sisa waktu ini, saya hanya akan memberi sedikit sekali contoh penggunaan pustaka QJson ini. Di situsnya sendiri, bagi newbie seperti saya, sepertinya kurang dijelaskan secara rinci bagaimana contoh penggunaannya.

Contoh Program

Program yang dibuat kali ini akan membaca dan mengurai file JSON dengan nama isifile.json. Isinya:

{
    "link": [
        "http://www.situs-satu.com/sesuatu-laman/",
        "http://www.situs-dua.com/sebuah-laman.php"
    ]
}

Agar berhasil saat run, file ini diletakkan pada build directory.

Kode Program

Pastikan libqjson sudah terinstal. Lalu tambahkan pada file .pro sebuah baris:

LIBS += -L/usr/local/lib -lqjson

dialog.h

#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QLabel>
#include <QtDeclarative/QtDeclarative>
#include <qjson/parser.h>
#include <QVariant>
class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();
    bool ok;
};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include <QByteArray>
#include <QTextStream>
#include <QFile>
#include <QStringList>
#include <QGroupBox>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    QJson::Parser parser;
    QLabel *label = new QLabel(this);
    //label->setText("hello world");
    //label->show();

    QHBoxLayout *tata = new QHBoxLayout;
    tata->addWidget(label);
    QGroupBox *grup = new QGroupBox("this is example of JSON parser");
    grup->setLayout(tata);
    QVBoxLayout *tatak = new QVBoxLayout;
    tatak->addWidget(grup);
    setLayout(tatak);

    QFile data("isifile.json");
    data.open(QFile::ReadOnly);
    QTextStream dataJ(&data);
    QByteArray fileJson(dataJ.readAll().toLatin1());
    this->setMinimumHeight(100);
    this->setMinimumWidth(100);
    QVariantMap hasil = parser.parse(fileJson,&ok).toMap();
    QStringList links;
    if(!ok)
        label->setText("Gagal");
    foreach (QVariant tautan, hasil["link"].toList()) {
        //label->setText(tautan.toString());
        links << tautan.toString();
    }
    label->setText(links.join("\n"));
    data.close();
}

Dialog::~Dialog()
{

}

Keterangan Kelas

Pertama, kita memanggil QJson::Parser dari libqjson-dev, lalu membuat objek parser. Lalu membuat objek QLabel untuk menampilkan isi dari notasi JSON yang diproses. Tata letak widget diatur dengan QHBoxLayout, QVBoxLayout dan QGroupBox.

QFile untuk menangani file isifile.json. QTextStream untuk membaca isi dari file JSON, lalu memuatkannya ke QByteArray. QVariantMap untuk memetakan notasi JSON.

Objek QVariant tautan menjabarkan notasi “link” dalam file JSON menjadi QStringList. Terakhir, QLabel menampilkan QStringList yang di-join dengan pemisah “\n” (newline).

Dan hasil akhir program adalah sebagai berikut:

qt4 json parser
Hasil akhir program sederhana ini

Demikianlah tulisan singkat kali ini. Semoga berguna bagi pembaca yang mencari tentang ini.

Advertisements

Published by

Badwi

A Muslim, sober, a Javanese

2 thoughts on “Mengurai (Parsing) JSON Qt4 dengan QJson”

Share your idea here (markdown enabled)

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s