JSONフォーマットとは?その基本と使い方

プログラミング

JSONとは、データ構造を記述するフォーマットの一種です。
CSV等とは異なり、階層構造を記述することができます。
階層構造を表現できるフォーマットとしてはXMLも挙げられますが、JSONフォーマットはXMLよりも簡易的に記述できる、JavaScriptとの親和性が高い、といった特徴があります。
電文でのデータ通信で多く使われる印象があります。

以下では、JSONについて、フォーマットの簡単な説明と、JSONの生成・読込を行う簡単なサンプルコードを取り上げます。


【JSONのフォーマットの簡単な説明】

■データの開始と終了

開始は”{“、終了は”}”で示されます。

■データの構造

以下のように、変数名と値を”:”で区切って表記します。
変数名はダブルクォーテーションで囲います。
(値については後述します)

{ "height" : 170 }

変数名と値のペアが複数ある場合は、ペアを”,”で区切って表記します。

{ "height" : 170, "weight" : 58.8 }

人に読ませることを意識する場合、以下のように改行を入れてわかりやすくすることが多いです。

{
  "height" : 170,
  "weight" : 58.8
}

■値の種類

JSONでは以下の値を使用することができます。

・数値
数値を記述することで、数値としてみなされます。

{ "height" : 170 }
{ "weight" : 58.8 }

・文字列
ダブルクォーテーションで囲うことで、文字列としてみなされます。

{ "str" : "hoge" }

・true/false
trueと記述することで、真としてみなされます。
falseと記述することで、偽としてみなされます。

{ "flag1" : true }
{ "flag2" : false }

・null
nullと記述することで、nullとしてみなされます。

{ "flag3" : null }

・オブジェクト
“{“と”}”で囲うことで、オブジェクトとしてみなされます。
これにより、階層構造の記述が可能になります。

{
  "name": {
    "firstName":"miku",
    "lastName":"hatsune"
  }
}

・配列
“[“と”]”で囲うことで、配列としてみなされます。

{"numList": [ 1, 2, 3 ]}

■文字コード

文字コードはUTF-8(BOM無し)を使用します。

■その他詳細

RFC8259)がJSONの正式な仕様となりますので、こちらをご参照ください。


【JSONの生成・読込を行うサンプルコード】

ここでは、JavaScript(Node.js)でのサンプルコードを提示します。
以下のように、JSONの生成・読込を行うための機能が用意されており、それを利用することで容易に生成・読込が可能になります。

■生成のサンプル

・コード(stringify.js)

let worker = {
  skill: "singing",
  name: {
    firstName: "miku",
    lastName : "hatsune"
  }
};
let json = JSON.stringify(worker)
console.log(json);

・実行結果

C:\tmp>node stringify.js
{"skill":"singing","name":{"firstName":"miku","lastName":"hatsune"}}

C:\tmp>

■読込のサンプル

・コード(parse.js)

let json = '{"skill":"singing","name":{"firstName":"miku","lastName":"hatsune"}}';
let worker = JSON.parse(json);
console.log("skill: " + worker.skill);
console.log("firstName: " + worker.name.firstName);
console.log("lastName: " + worker.name.lastName);

・実行結果

C:\tmp>node parse.js
skill: singing
firstName: miku
lastName: hatsune

C:\tmp>

いかがでしたでしょうか。

JSONは、JavaScriptを使う場合はもちろんのこと、他システムとのやりとりでも使うことが少なくないので、使う言語によらず学んでおいて損はないと思います。

コメント

タイトルとURLをコピーしました