Qt5でJSON
- 2015/01/17
- #C++
みょみょみょ.
最近, いろいろあって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")...
と続けていきます.
QJson, 微妙ぃ.....
— とさいぬ (@myon\_\_\_) January 16, 2015
これもっとCoolな書き方できないんですかね https://t.co/myBJAUPsOr
— とさいぬ (@myon\_\_\_) January 16, 2015
こりゃないっしょ.....って感じだ
— とさいぬ (@myon\_\_\_) January 16, 2015
求: Qtの機能だけでもっとCoolに各Valueを取得する方法