技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

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(https://tools.ietf.org/html/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>