Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

C++でJSONを読む

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2014/05/13 14:00

 おシゴトでJSONを扱うことになりました。どこぞのサーバがWeb-serviceをホストしてて、サービスとのやりとり(リクエストとその応答)がJSONで行われるらしく、C++でJSONを読み取る方法をリサーチしてくれとのこと。

目次

 Web-serviceのインターフェースはXMLがよく用いられますが、近頃はJSONが増えてきたみたいです。JSONはXMLに比べフォーマットが単純で伝文がコンパクト、軽量インターフェースなのでスマホのような(デスクトップ機よりは)非力なクライアントでも楽に扱えますからね。そんなわけでC++でJSONを扱うべくリサーチを始めました。

JSONの構造

 JSON:JavaScript Object Notation(JavaScriptオブジェクト記法)、RFC4627(PDF)で規定されています。英文とはいえ10ページにも満たない小さな規格ですからさほどの苦労もなく理解できます。

 えーと、まずJSONで表現できるvalue(値)は:

  • boolean(真偽値)
  • number(数値)
  • string(文字列)

の3つの基本型。booleanはtrueかfalse、numberは浮動小数点いわゆるdouble値(整数値はありません)、stringは文字通り「"」で囲まれた文字列です。

 さらに構造をもったvalueとして:

  • array(配列)
  • object(オブジェクト)

があります。arrayは0個以上のvalueを内包する順序列、valueを「,」で区切り、「[」と「]」で囲みます。objectはキーと値の組を並べたもの、いわゆる連想配列あるいは辞書と呼ばれるアレです。キーはstring、値はvalueで、key:value を「,」で区切って並べ、「{」と「}」で囲みます。

 そしてもう一つ、値を持たないこと(無効値)を表す:

  • null

もvalueの一員です。

 これらのvalueを文字列で表現したJSON textが伝文としてやりとりされるのですが、JSON textはarrayまたはobjectでなくてはなりません。さらに、JSON textはUnicodeでなくてはなりません(通常UTF-8が用いられます)。

 RFC4627の末尾にあったJSON textの一例:example.jsonを以下に示します。読みやすいようにインデント/改行していますが、伝文として用いるときはメッセージ長をケチるためか、改行/空白をはしょってギチギチに詰められることが多いようです。

 テキストとしても読みやすいですね。難点があるとすれば「コメントが書けない」ことでしょうか。メッセージのやりとりが目的の記法でありヒトサマが読むことは考えてないので仕方がないことではありますが。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • επιστημη(エピステーメー)

    C++に首まで浸かったプログラマ。 Microsoft MVP, Visual C++ (2004.01~2018.06) "だった"り わんくま同盟でたまにセッションスピーカやったり 中国茶淹れてにわか茶人を気取ってたり、 あと Facebook とか。 著書: - STL標準...

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5