꿈꾸는 시스템 디자이너

간단한 JSON 예제 본문

Development/Qt

간단한 JSON 예제

독행소년 2016. 5. 24. 10:52

JSON은 데이터를 쉽게 구조화하여 read/write하는 툴이다. 구조화 된 데이터를 로컬에 파일로 저장하거나 장치간의 통신 메시지 사용할 때 유용하다.

 

실제 구조를 보면 다음과 같이 변수명과 데이터 형태로 쌍을 이루고 있다.

 

 

이 데이터를 읽고/갱신하는 툴은 다음과 같다.

 

QT에서도 JSON 데이터를 객체화 하기 위한 QJsonObject 클래스와 문서화 하기 위한 QJsonDocument 클래스 등을 제공하고 있다.

 

다음은 QT에서 JSON을 이용하는 간단한 예제이다.

 

<deviceinfo.h>

#ifndef DEVICEINFO_H

#define DEVICEINFO_H

#include <QJsonObject>
#include <QDebug>
#include <QFile>
#include <QJsonDocument>
#include <QByteArray>

class DeviceInfo
{
public:
    DeviceInfo();

    QJsonObject jsonObj;

    QString getDevName() const;
    void setDevName(const QString &value);

    QString getDevID() const;
    void setDevID(const QString &value);

    bool saveJSON();
    bool loadJSON();

    void showDevInfo();

private:
    QString devName;
    QString devID;

};

#endif // DEVICEINFO_H

 

 

<deviceinfo.cpp>

 #include "deviceinfo.h"


DeviceInfo::DeviceInfo()
{
}
QString DeviceInfo::getDevName() const
{
    return devName;
}

void DeviceInfo::setDevName(const QString &value)
{
    devName = value;
}
QString DeviceInfo::getDevID() const
{
    return devID;
}

void DeviceInfo::setDevID(const QString &value)
{
    devID = value;
}

bool DeviceInfo::saveJSON()
{
    this->jsonObj["devName"] = devName;
    this->jsonObj["devID"] = devID;

    QFile saveFile(QStringLiteral("deviceInfo.json"));

    if(!saveFile.open(QIODevice::WriteOnly)){
        qWarning("Cound not open json file to save");
        return false;
    }

    QJsonDocument saveDoc(jsonObj);
    saveFile.write(saveDoc.toJson());
    showDevInfo();

    return true;
}

bool DeviceInfo::loadJSON()
{
    QFile loadFile(QStringLiteral("deviceInfo.json"));

    if(!loadFile.open(QIODevice::ReadOnly)){
        qWarning("Could not open json file to read");
        return false;
    }

    QByteArray loadData = loadFile.readAll();
    QJsonDocument loadDoc(QJsonDocument::fromJson(loadData));
    jsonObj = loadDoc.object();
    devName = jsonObj["devName"].toString();
    devID = jsonObj["devID"].toString();
    showDevInfo();
}

void DeviceInfo::showDevInfo()
{
    qDebug() << ":: Device Name: " << devName;
    qDebug() << ":: Device ID: " << devID;
    qDebug() << ":: jsonObj[\"devName\"] = " << jsonObj["devName"].toString();
    qDebug() << ":: jsonObj[\"devID\"] = " << jsonObj["devID"].toString();
}



 

Comments