Jsonとは?特徴からデータ形式、書き方まで徹底解説
Jsonという言葉に、あまり耳なじみがないかもしれませんが、Twitter、 Google、Slackなど、私たちの周りにある有名なWebサービスでも欠かせない技術となっています。この記事では、Jsonとは何か、その特徴について初学者にもわかりやすく解説していますので、ぜひご覧ください。
-
Contents
Jsonとは
異なるアプリケーション間でデータを送る際に使用されるテキスト形式によるデータ表記法の一つです。
開発者の定義した(ユーザー定義型)複数の項目からなるデータ(複合データ型)を送る際に用いられます。
それぞれのアプリケーションは、異なるプログラミング言語で記述されていたり、独自フォーマットによるファイル管理がされていることがあり、異なるアプリケーション間での互換性がない場合が多く、Jsonなどのテキストファイルによりデータ交換をおこなえます。
Jsonには、IETF(Internet Engineering Task Force)による規格と、ECMAScriptによる規格が存在していましたが、2017年に連携され、それぞれ「RFC8259」「ECMA-404 2nd Editon」が最新の規格となっています。
参考:RFC8259
-
XMLとの違い
XML、Jsonと同様にデータ交換に利用されますが、表記法が異なります。
XMLは、ジョン・ボサック氏により開発されたマークアップ言語です。「Extensible Markup Language」の略で、「拡張可能なマークアップ言語」を意味します。マークアップ言語とは、元々ある文章にマークをつけた、構造を明らかにした形式の言語です。
例えば、「今朝ごはんを食べました」という文章があったとして、これをマークアップ言語で記述すると下記のようになります。
<行為の時間を示します>「今朝」</行為の時間を示します>
<行為の対象を示します>「ごはんを」</行為の対象を示します>
<行為を示します>「食べました」</行為を示します>
マークアップ言語の代表格として、HTMLがあります。
XMLは、HTMLと同じWorld Wide Web Consortium(W3C)により、2010年に「XML 1.0 」「 XML 1.1」の二つの規格が定められています。
参考:XML 1.0
-
CSVとの違い
CSVも、Jsonと同様にデータ交換に利用されますが、表記法が異なります。
CSVは、「Comma-Separated Values」の略で、「カンマ区切り」を意味します。Microsoft Excelを始めとして、表計算ソフトなどで古くから使用されており、データをカンマで区切って記述します。体裁としては、JsonはXMLよりCSVに似ています。
2005年に定められたRFC(Request for Comments)4180が最新の国際標準規格となっています。
参考:RFC-4180
-
Jsonの特徴
Jsonの特徴について見ていきます。
-
データ量が少ない
Jsonは、XMLと比較して記述量が少なく、データ容量が少ない傾向にあります。
テキストデータのため、1ファイル辺りの容量では大差ない可能性はありますが、通信回数が増えると無視できないデータ容量となるため、データ容量の少ないJsonは優位といえます。
-
表記形式がシンプル
Jsonの体裁は、JavaScriptのオブジェクト構文に由来しており、XMLと比較して記述量が少なく、可読性が高い傾向にあります。
-
言語に依存しない
そもそも、異なるプログラミング言語間では、互換性の問題からデータの交換をおこなうことができないため、テキストベースのJsonを利用し、データのやり取りをおこなえるようにしています。
-
自由度が高い
JsonはJavaScriptのオブジェクト構文のように記述できるので、複数のデータを組み合わせた複合データを記述できます。同様のことをCSVでおこなった場合、属性との関連性が見えなくなりやすく、可読性が低下しますし、XMLでは記述量が増え、管理がしにくくなります。
-
Jsonを使う際の注意点
Jsonは、CSVやXMLよりも自由度が高く、複雑な内容を記述できます。Json自体がXMLなどに比べてデータ容量が低いとはいえ、過度に複雑な内容になれば、1ファイル辺りのデータ容量は増え、その優位性は失われます。
複雑な内容を記述できるゆえに、どのようなデータを通信すべきか、ということをデータ容量の観点からも考える必要があるでしょう。
-
Jsonの基本的な記述方法
JsonとJavaScriptのオブジェクトの記述の仕方は似ています。Jsonはnameと、valueをダブルクォーテーションで囲みますが、オブジェクトは、valueをダブルクォーテーションで囲む必要はありますが、nameはそのままでも問題ありませんし、シングルコーテーションで囲っても問題ありません。以下、具体例を見てみます。
(例)
・JavaScriptのオブジェクト
{
id: 0,
name: “banana”,
}
・json
{
“id”: 0,
“name”: “banana”,
}
-
Jsonが対応するデータ型
Jsonが対応するデータ型について解説します。データ型とはプログラミング言語が扱うデータの種類です。
-
文字列
ユーザーが定義する文字列です。ダブルクォーテーションで囲みます。文字列にダブルクォーテーションを使用したい場合は、バックスラッシュでエスケープします。
(例)
“banana”
“ba\”nana”
-
数値
JavaScriptと同様に数字をそのまま書きます。
(例)
123
-123
1.23
-
bool値
真偽値ともいい、true か false のどちらかをそのまま書きます。
(例)
true
false
-
オブジェクト
nameとvalueをコロンで区切ったものを一対とし、対はコロンで区切ります。全体を波括弧で囲ったものをオブジェクトといいます。入れ子構造が可能です。
(例)
{
“name1″:”banana”,
“name2″:”ringo”
}
-
配列
値をカンマで区切り、角カッコで囲ったものを配列といいます。入れ子構造が可能です。
(例)
[1, 2, 3]
-
null
nameはあるが、valueがない状態の際にそのままnullと書きます。
(例)
null
-
プログラミング言語ごとでのJsonの扱い方
Jsonを使用しデータ交換をおこなう際、エンコードとデコードをおこないます。プログラミング言語ごとでの扱い方を簡単にみていきます。
-
JavaScript
JavaScriptのオブジェクトからJsonへの変換は、JSON.stringfiy関数を用います。
反対に、JsonからJavaScriptのオブジェクトに変換する際は、JSON.parseを使います。
-
Java
jacksonなどのライブラリをJavaに追加し、ObjectMapperクラスを用いて、インスタンスを作成し、readValueメソッドによりJsonに変換します。
JasonからJavaオブジェクトに変換する際も、ObjectMapperクラスを用いてインスタンス作成後、writeValueAsStringメソッドを用います。
-
PHP
PHPのオブジェクトをJsonに変換する際は、json_encode関数を使用します。反対に、JsonからPHPに変換する際は、json_decodeを用います。
-
Python
PythonのオブジェクトをJsonに変換する際は、json.dumpsを用います。反対にJsonからPythonに変換する際は、json.loadsを用います。
-
Jsonの使用シーン
近年、Webサービス、Webアプリケーションにおいて、ほとんどの場面でJsonが利用されています。では、具体的にどのような場面で使用されているのでしょうか?
Twitterを例にして解説します。例えば、ユーザーがTwitterの「いいね」ボタンを押したとします。その情報は、瞬時にサーバーに届けられ、サーバーは「いいね」ボタンを押したことによる変化後の状態のデータをTwitterに返します。Twitterは「いいね」ボタンが押された状態になりました。
このように、Webサービスとサーバーのやり取りに、Jsonが使われています。
-
まとめ
Webにおいて、Jsonは欠かせない技術となっています。そのため、どのようなプログラミング言語を扱う際も必要となってきますので、この機会にぜひJsonについて学んでみてください。