SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

連載記事

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

CodeZine BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。

書籍に関する記事を見る

'); googletag.cmd.push(function() { googletag.pubads().addEventListener('slotRenderEnded', function(e) { var ad_id = e.slot.getSlotElementId(); if (ad_id == 'div-gpt-ad-1659428980688-0') { var ad = $('#'+ad_id).find('iframe'); if ($(ad).width() == 728) { var ww = $(window).width(); ww = ww*0.90; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/728+","+ww/728+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/728+","+ww/728+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/728+","+ww/728+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/728+","+ww/728+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(90*ww/728)+"px;width:"+728+"px;}", 0 ); } else { if ($(window).width() < 340) { var ww = $(window).width(); ww = ww*0.875; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/320+","+ww/320+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/320+","+ww/320+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/320+","+ww/320+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/320+","+ww/320+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(180*ww/320)+"px;width:"+320+"px;}", 0 ); } } } }); }); } else { document.write('
'); document.write('
'); }
特集記事

C++でJSONを読む

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルファイル (69.1 KB)

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

 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を以下に示します。読みやすいようにインデント/改行していますが、伝文として用いるときはメッセージ長をケチるためか、改行/空白をはしょってギチギチに詰められることが多いようです。

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

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
PicoJSON

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

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

C++に首まで浸かったプログラマ。Microsoft MVP, Visual C++ (2004.01~2018.06) "だった"りわんくま同盟でたまにセッションスピーカやったり中国茶淹れてにわか茶...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7735 2014/05/13 14:00
" ); }

おすすめ

アクセスランキング

  1. 1
    日本マイクロソフト、AI学習プラットフォーム「AI SKILLS NAVIGATOR日本語版」を無償提供
  2. 2
    AI搭載コードエディタ「Cursor」に新たなTabモデル「Fusion」が導入
  3. 3
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  4. 4
    「ジェネレータ」 ~マンガでプログラミング用語解説
  5. 5
    Electronの最新版「Electron 34.0.0」正式リリース NEW
  1. 6
    世界のITエンジニア数は前年より6.1%増の2994.3万人。日本は4位にランクインするも前年より横ばい NEW
  2. 7
    Next.js 15の新機能――ルーティングとキャッシュの制御の変更を中心に解説 NEW
  3. 8
    Flutterでアプリをビルドしよう。AndroidとiOSそれぞれの流れを解説
  4. 9
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  5. 10
    『システム障害対応 実践ガイド』著者が語る、1000件の事例から学んだ障害対応のベストプラクティス

アクセスランキング

  1. 1
    日本マイクロソフト、AI学習プラットフォーム「AI SKILLS NAVIGATOR日本語版」を無償提供
  2. 2
    AI搭載コードエディタ「Cursor」に新たなTabモデル「Fusion」が導入
  3. 3
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  4. 4
    「ジェネレータ」 ~マンガでプログラミング用語解説
  5. 5
    Electronの最新版「Electron 34.0.0」正式リリース NEW
  6. 6
    世界のITエンジニア数は前年より6.1%増の2994.3万人。日本は4位にランクインするも前年より横ばい NEW
  7. 7
    Next.js 15の新機能――ルーティングとキャッシュの制御の変更を中心に解説 NEW
  8. 8
    Flutterでアプリをビルドしよう。AndroidとiOSそれぞれの流れを解説
  9. 9
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  10. 10
    『システム障害対応 実践ガイド』著者が語る、1000件の事例から学んだ障害対応のベストプラクティス
  1. 1
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  2. 2
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  3. 3
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  4. 4
    1/10まで全文無料公開、人気の入門書シリーズ『いきなりプログラミング Androidアプリ開発』
  5. 5
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  6. 6
    Google、社内AIエージェント「Google Agentspace」発表
  7. 7
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  8. 8
    日本マイクロソフト、AI学習プラットフォーム「AI SKILLS NAVIGATOR日本語版」を無償提供
  9. 9
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  10. 10
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

メールバックナンバー

アクセスランキング

  1. 1
    日本マイクロソフト、AI学習プラットフォーム「AI SKILLS NAVIGATOR日本語版」を無償提供
  2. 2
    AI搭載コードエディタ「Cursor」に新たなTabモデル「Fusion」が導入
  3. 3
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  4. 4
    「ジェネレータ」 ~マンガでプログラミング用語解説
  5. 5
    Electronの最新版「Electron 34.0.0」正式リリース NEW
  1. 6
    世界のITエンジニア数は前年より6.1%増の2994.3万人。日本は4位にランクインするも前年より横ばい NEW
  2. 7
    Next.js 15の新機能――ルーティングとキャッシュの制御の変更を中心に解説 NEW
  3. 8
    Flutterでアプリをビルドしよう。AndroidとiOSそれぞれの流れを解説
  4. 9
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  5. 10
    『システム障害対応 実践ガイド』著者が語る、1000件の事例から学んだ障害対応のベストプラクティス

アクセスランキング

  1. 1
    日本マイクロソフト、AI学習プラットフォーム「AI SKILLS NAVIGATOR日本語版」を無償提供
  2. 2
    AI搭載コードエディタ「Cursor」に新たなTabモデル「Fusion」が導入
  3. 3
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  4. 4
    「ジェネレータ」 ~マンガでプログラミング用語解説
  5. 5
    Electronの最新版「Electron 34.0.0」正式リリース NEW
  6. 6
    世界のITエンジニア数は前年より6.1%増の2994.3万人。日本は4位にランクインするも前年より横ばい NEW
  7. 7
    Next.js 15の新機能――ルーティングとキャッシュの制御の変更を中心に解説 NEW
  8. 8
    Flutterでアプリをビルドしよう。AndroidとiOSそれぞれの流れを解説
  9. 9
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  10. 10
    『システム障害対応 実践ガイド』著者が語る、1000件の事例から学んだ障害対応のベストプラクティス
  1. 1
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  2. 2
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  3. 3
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  4. 4
    1/10まで全文無料公開、人気の入門書シリーズ『いきなりプログラミング Androidアプリ開発』
  5. 5
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  6. 6
    Google、社内AIエージェント「Google Agentspace」発表
  7. 7
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  8. 8
    日本マイクロソフト、AI学習プラットフォーム「AI SKILLS NAVIGATOR日本語版」を無償提供
  9. 9
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  10. 10
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ