QT C++ ile JSON Veri İşleme

QT C++ ile JSON Veri İşleme

Herkese merhabalar, bu yazımızda sizlerle Qt frameworku ve C++ dili ile popüler bir veri taşıma aracı olan JSON formatı ile veri depolama ve işlemeden bahsedeceğiz.

Hadi başlayalım

İlk olarak JSON tipi nedir ?

JSON bir veri depolama ve transfer objesidir. JSON sayesinde farklı diller ve platformlar arasında veriyi güvenli bir şekilde taşıyabilmekteyiz. JSON ifadesi JavaScript Object Notation kısaltmasıdır.

Aşağıda örnek bir JSON verisi görünmektedir:


{
    "isim": "Burak Hamdi",
    "soyisim": "TUFAN",
    "yas": 26,
    "adres": {
        "il": "Istanbul",
        "ulke": "TURKEY"
    },
    "tel": [
        "0555555555",
        "01111111111"
    ]
}

Hadi şimdi QT C++ ile biraz JSON verisi oluşturalım.

İlk olarak ilgili sınıfımıza aşağıdaki kütüphaneleri eklememiz gerekmektedir.


#include <QJsonDocument>
#include <QJsonParseError>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonArray>

Aşağıdaki kod bloğunda bir JSON objesi oluşturup bazı verileri tutalım.


    //Bütün JSON verisi için bir bir ana obje oluşturalım
    QJsonObject mainObject;

    //Tekil verileri ekleyelim
    mainObject.insert("isim", "Burak Hamdi");
    mainObject.insert("soyisim", "TUFAN");
    mainObject.insert("yas",26);

    //Json içine başka bir json objesi ekleyelim.
    QJsonObject adr;
    address.insert("il", "Istanbul");
    address.insert("ulke", "TURKEY");
    //bu objeyi ana objeye ekleyelim
    mainObject.insert("adres",adr);

    //bir json dizisi oluşturalım
    QJsonArray nolar;
    phones.push_back("0555555555");
    phones.push_back("01111111111");

    // şimdi bu diziyi ana objeye ekleyelim
    mainObject.insert("tel", nolar);

    // son olarak bir JSON dokumanı oluşturalım ve ana objemizi bu dokumanın JSON objesi yapalım
    QJsonDocument jsonDoc;
    jsonDoc.setObject(mainObject);

    // Son olarak Json objemizi düz yazı olarak yazdıralım
    ui->txtJsonEncoded->setPlainText( jsonDoc.toJson() );

Şimdi yukarıda ne yaptığımızı adım adım açıklayalım :

  • İlk olarak bütün verileri yüklemek için bir JSON objesi oluşturduk ve bu objeye tekil verilerimizi ekledik.
  • Sonrasında Json objemizin içerisine başka bir Json objesi eklemek istedik. Bu sebeple yeni bir QJSONObject oluşturduk ve içerisine veilrer yükledik
  • Sonrasında oluşturulan ikincil JSON objesini ana Json objesine ekledik.
  • Sonrasına bir Json dizisi oluşturduk ve bu dizimizi ana JsonObjemize ekledik Bunun için QJsonArray sınıfını kullandık ve içeriye eklediğimiz veirleri Json dizisi olarak eklenmiş oldu.
  • Son olarak bir Json Dökümanı oluşturduk ve ana Json objemizi bu dökümanın ana json objesi olarak ayarladık.
  • Artık bütün verilerimiz ana Json objemizle birlikte Json dökümanı içerisinde.
  • Son oalrak Json objemizi düz yazı olarak çıktı vermek istersek QJsonDocument sınıfı içerisindekiki toJson() metodu ile düz yazıya dönüştürmüş olduk.

Buraya kadar bir veri setinin nasıl bir Json nesnesi haline getirildiğini görmüş olduk.

Önemli Not
Json veri işlemede QJson sınıfları veriyi key alanlarını kullanarak alfabetik olarak sıralar. (Qt5.11 e kadar olan apiler için geçerlidir.)


O zaman şimdi JSON verisi çözümleyelim.

Blow code block you will see the decoding a JSON data with QT C++.


    //İlk olarak QString olarak gelen json verisini Byte Dizisine dönüştürelim
    QByteArray jsonData = ui->txtJsonEncoded->toPlainText().toUtf8();
    if(jsonData.isEmpty() == true) qDebug() << "Json verisi alınamadı";

    //Json texti bir Json doküman nesnesine atayalım
    QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonData);
    if(jsonDocument.isObject() == false) qDebug() << "It is not a JSON object";

    //Json dokümanı içindeki json objesini alalım
    QJsonObject object = jsonDocument.object();

    //Json objesindeki tekil verilere erişim
    QJsonValue name = object.value("isim");
    QJsonValue surname = object.value("soyisim");
    QJsonValue age = object.value("yas"); //sayısal bir değer

    //Json objesi içindeki bir json objesinin verileri. bu veriler süslü parantezler { } içerisindeki veriler
    QJsonObject address = object.value("adres").toObject();
    QJsonValue addr_city = address.value("il");
    QJsonValue addr_country = address.value("ulke");

    //Json objesi içerisindeki bir json dizisine erişim. [ ] içerisindeki veriler
    QJsonArray phones = object.value("tel").toArray();
    qDebug() << "dizi içerisinde  " + QString::number(phones.size()) + " adet kayıt bulundu.";
    QString phoneList = "";
    for(unsigned int i=0; i<phones.size(); i++ ) phoneList.append(phones.at(i).toString() + "\n");

    QString decodedData = "";

    decodedData.append("İsim : " + name.toString() + "\n");
    decodedData.append("Soyisim : " + surname.toString() + "\n");
    decodedData.append("Yas : " + QString::number(age.toInt()) + "\n");

    decodedData.append("Adres : \n");
    decodedData.append("-İl : " + addr_city.toString() + "\n");
    decodedData.append("-İlçe : " + addr_country.toString() + "\n");

    decodedData.append("Telefonlar : \n" + phoneList + "\n");

    ui->txtJsonDecoded->setPlainText(decodedData);

    if(name.isString() == true) qDebug() << "isimverisi bir string verisidir";
    qDebug() << "İsim : " + name.toString();

Burada encoding işleminin tersine bir işlem yapmış olduk.

  • İlk olarak gelen Json verisi Byte Dizisine dönüştürülüyor.
  • Sonrasında veri bir JsonDokumanına dönüştürülüyor ve doğruluğu kontrol ediliyor. Sonrasında bir jeson objesine atanıyor.
  • Sonrasında JSON verisini içerisinde tutan objemiz oluşturuldu ve verilerimizi okumaya başladık.
  • Sonrasında verilerimizi okuyup ilgili değişkenlerine atama işlemlerini gerçekleştirdik.
  • İçerideki Json objeleri alabilmek için tekrardan Json objesi ve değişkenler oluşturuluyor ve veriler okunuyor.
  • Json dizisi içerisindeki verileri normal bir dizi gibi döngü içerisinde okuyabiliyoruz.
  • Son olarak verileri bir string değişkene atayıp ekrana yazdırıyoruz.
Artık Json veriyi yönetme işlemine hazırız
Bu yazımızda buraya kadar
Burak Hamdi TUFAN

Tags


Share this Post

Send with Whatsapp

Post a Comment

Success! Your comment sent to post. It will be showed after confirmation.
Error! There was an error sending your comment.

Comments

  • There is no comment. Be the owner of first comment...