記事一覧

データ記述言語:JSON の紹介

こんにちは、クマノミンです。
今回は、データ記述言語:JSON についての紹介をしてみたいと思います。

データ記述言語:JSON(ジェイソン、JavaScript Object Notation)とは、 JavaScriptにおけるオブジェクトの表記法をベースとしたデータ記述言語の1つである
【特徴】
○近似の技術としては、XMLがあるが、比較的、単純で軽量である
○JavaScriptをベースとしているので、Ajax(ウェブブラウザ内で非同期通信とインターフェイスの構築などを行う技術の総称)の分野でも注目され、幅広く使われ出している
○JavaScriptをベースとしているが、C言語を始め、多くの言語でエンジンがOSS(Open Source Software)として提供されている
【文法】
○左中括弧"{“ではじまり、右中括弧"}"で終わる
○オブジェクトは、キーと値のペアで構成され、コロン“:"で区切られる
 また、複数のオブジェクトは、カンマ" , "で区切る
○データは下記の型をサポートする
 ・文字列(Unicode形式)
 ・数値型(10進数表記のみ、整数・浮動小数点可※指数表示も対応可)
 ・真偽値(trueともしくはfalse※小文字であること)
 ・配列
 ・オブジェクト

例)
  {
    "name": "クレミア  太郎",
    "age": "4",
    "birthday": [
    {
      "year": "2011",
      "month": "9",
      "day": "26"
    }]
  }

【JSONに関するエンジン】
JSONに関するエンジンのうち、C言語で且つ、OSSで提供されているものは、下記の様なものがある
・Jansson     ・parson
・js0n      ・LibU     ・json-c
・json-parser   ・jsonsl    ・WJElement
・M's JSON parser ・cJSON    ・jsmn
・cson      ・ujson4c   ・nxjson
・frozen     ・JSON_checker ・YAJL
※他、多数

◯Janssonを使ったサンプル
 ※なお、下記のソースは動作保証するものではありません
  詳細などは付属.APIリファレンスを参照にしてくださいませ
<JSONで記述された構文を解析する>
#include <stdio.h>
#include "jansson.h"

int main( int argc, char *argv[] )
 json_error_t error;
 json_t   *root_f;
 json_t   *root_str;
 
 root_f = json_load_file( "./sample.txt", 0, &error ); // JSONファイルの取得
 if( NULL != root_f ) {
  // ファイルからJSONオブジェクトを取得できた場合
  root_str = json_object_get( root_f, "name" );   // 氏名(キー:"name")を取得する
  if( NULL != root_str ) {
   if( json_is_string( root_str ) ) {
    // 正常に文字列として取得できた場合
    printf( "name:%s\n", json_string_value( root_str ) );
    …
   (省 略)
    …
  
  json_decref( root_str );              // JSONオブジェクトの開放
  json_decref( root_f );               // JSONオブジェクトの開放
 }
 
 exit 0;
}

<JSONで記述された構文を出力する>
#include <stdio.h>
#include "jansson.h"

int main( int argc, char *argv[] )
 json_t   *root_f;
 json_t   *root_str;
  …
  (省 略)
  …
 root_f = json_object();                // 新オブジェクトの生成
 if( NULL != root_f ) {
  // 新オブジェクトの生成が成功した場合
  root_str = json_string( "クレミア 太郎" );
  if( NULL != root_str ) {
   json_object_set( root_f, "name", root_str );
  }
   …
   (省 略)
   …
  json_dump_file( root_f, "./sample.txt", 0 );    // 所定のファイルへ出力する
  
  json_decref( root_str );              // JSONオブジェクトの開放
  json_decref( root_f );               // JSONオブジェクトの開放
 }
 
 exit 0;
}

◯その他
 JSON構文をチェックするに以下の様な便利なサイトもある
 《JSONLint》
 http://jsonlint.com/