読者です 読者をやめる 読者になる 読者になる

Folioscope

プログラミング/Unix系/デザイン/CG などのメモがもりもり

JSON on Qt 5

JSONは素晴らしいデータ構造で,シンプルながら人間にもわかりやすいデータ構造です. 喜ばしいことにQt 5からもJSONライブラリが追加されました.

QtCore 5.0: JSON Support in Qt | Documentation | Qt Project

使用するクラスも見事にシンプルで,JSONの出力は次のクラスのみで実装できます.

  • QJsonObject JSONオブジェクトを扱うクラス.JSONオブジェクトは{}で囲われたキーとJSON値から成る連想配列のこと.
  • QJsonArray JSON配列を扱うクラス.JSON配列とは[]で囲われたJSON値の配列である.
  • QJsonValue JSON値を扱うクラス.JSON値とは文字列,数値,JSONオブジェクトやJSON配列も含む.
  • QJsonDocument JSONのデータ構造を入出力するクラス.

QJsonArrayとQJsonObjectはQJsonValueにもなりえますので,QJsonValueへ変換可能です.

簡単な例

QtのJSONライブラリは恐ろしくシンプルで直感的なので.解説がいらないほどですが,使い方を載せておきます. Qtによる実装は,演算子のオーバーロードを巧みに扱い,よりシンプルに記述することができます.

#include <QJsonArray>
#include <QJsonObject>
#include <QJsonDocument>
#include <QDate>
#include <iostream>

int main()
{
    QJsonObject person1;
    person1["name"] = QString("yu-na");  // JSONオブジェクトにキー(文字列)と値を追加
    person1["age"] = 15;

    QJsonObject person2;
    person2["name"] = QString("kotomi");
    person2["age"] = 10;

    QJsonArray persons;
    persons.append(person1);  // JSON配列に追加
    persons.append(person2);

    QJsonObject root;
    root["date"] = QDate::currentDate().toString();
    root["persons"] = persons;

    QJsonDocument doc;
    doc.setObject(root);  // ルートオブジェクトを指定
    std::cout << doc.toJson().data();
}

出力

{
    "date": "Wed Sep 18 2013",
    "persons": [
        {
            "age": 15,
            "name": "yu-na"
        },
        {
            "age": 10,
            "name": "kotomi"
        }
    ]
}