Qt5でJSON

みょみょみょ.

最近, いろいろあってQt5を触っています(近いうちの記事で詳しく書きます).
ちょっとJSON文字列をQtの機能だけでParseしたくなって, どう書けばいいのか粘っていたらこうなった.

あるJSONの"relationship" => "source" => "screen_name"が指している文字列("bert")を取得することを考えてみます.

QtのJSON周りの主要なクラスにはQJsonDocument, QJsonObject, QJsonValueの3つがあるようです.
QJsonDocumentはJSONドキュメント自体を扱うクラス,
QJsonObjectはパースされたJSONのKeyを扱うクラス,
QJsonValueはJSONの各keyが指しているValueを扱うクラスです.

まず, JSON文字列をParseするにはQJsonDocumentクラスを使います. Parseする方法はいくつかありますが, QJsonDocument::fromJson()QByteArrayに変換したJSON文章を渡すのが確実っぽい感じでした.

ParseしたJSONの各要素を扱うため, QJsonDocument.object()を使ってQJsonDocumentからQJsonObjectを取得します.

QJsonObjectで, あるKeyが指しているValueを取得するにはQJsonObject.value("hoge")を使います. するとQJsonValueが返ってきます.

この状態で目的のValueに辿り着いたのであればQJsonValue.toString()QJsonValue.toDouble()で文字列や数値に変換してやります.
しかし, 更に深い要素が欲しいのであればQJsonValue.toObject()で再びQJsonObjectに変換してやり, 同様に.value("hoge").toObject().value("fuga")...と続けていきます.

求: Qtの機能だけでもっとCoolに各Valueを取得する方法