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 :
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.
Comments