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" } ] }