万能すぎる?JSON形式について
〜JavaScriptの範囲を超えた“言語を超越する”データ形式〜
1. JSONって何者?
まずJSONとは、JavaScript Object Notationの略。言葉の通り、もともとはJavaScriptで使われていたオブジェクト表記をベースにしたデータフォーマットです。
たとえば、こんな感じの記述、見たことありませんか?
{
"name": "takeshi",
"age": "20",
}
これがJSONです。見た目はほとんどJavaScriptのオブジェクトと一緒ですね。でも注意すべきは、JSONは“JavaScriptだけのもの”ではないということです。
今やPythonでも、Javaでも、Goでも、Rustでも、Rubyでも、とにかく全部の言語で使えます。
2. JavaScriptの檻を飛び越えたデータ形式
なぜJSONは他の言語でも使われるようになったのか?
これは一言でいえば、シンプルすぎて、誰でも使えるからです。
JSONの構造は、「キーと値のペア(辞書やマップ的構造)」と「配列」の二つだけ。そこに文字列・数値・真偽値・nullを入れるだけ。
うんちくポイント:
JSONの仕様は、RFC 8259(以前はRFC 4627)としてIETFによって標準化されており、ECMA(ECMAScriptの標準団体)とは別筋の団体によって承認されているんです。つまり、JavaScriptからは生まれたけど、国際的な“言語無関係”標準になったということ!
この「言語に依存しない中立的なデータ形式」っていう立ち位置が、JSONをデータ交換の世界的共通語に押し上げました。
3. どこで使われているの?
JSONは、今やあらゆるところで使われています。
- Web APIのレスポンス
たとえばTwitter API、OpenWeather API、GitHub APIなど、ほとんどがJSONでデータを返してきます。 - 設定ファイル(
package.json,tsconfig.json,composer.jsonなど) - データ保存・通信
- NoSQL系DB(MongoDBなど)
- モバイルアプリとサーバー間の通信
JSONは軽くて扱いやすいので、XMLの牙城を一気に崩しました。
(かつてはSOAP + XMLが王道だったけど、REST + JSONが主流に…)
雑学:
XMLは階層表現やデータスキーマの明示などでメリットもあったけど、人間にとって読みづらいという大きな弱点があった。対してJSONは「見てわかる」「書いてわかる」。つまり開発者フレンドリー!
4. JSONとJavaScriptの微妙な違い
意外と知られていないけど、JavaScriptのオブジェクト表記とJSONは完全には一致しません。
たとえば:
// JavaScriptではOK
const obj = {
key: 'value',
method() { console.log('Hello'); },
date: new Date()
};
これをそのままJSONにするとアウトです。なぜか?
JSONに入れられるのは、文字列、数値、真偽値、配列、オブジェクト、nullだけ。
関数、undefined、Dateオブジェクトなどはサポート外なんです。
なので、JSON.stringify(obj) すると、methodやdateは無視されたり文字列化されたりします。
5. JSONが愛される理由
- 軽い(余計な記述がない)
- わかりやすい(人間が読める)
- 言語に依存しない(中立的)
- あらゆるプラットフォームでサポートされている
- パース(読み取り)が簡単(
JSON.parse()) - シリアライズ(文字列化)も簡単(
JSON.stringify())
これはもう、“データの共通語”の王者といえる存在です。
6. JSONの兄弟たち
JSON5
JSONより少しゆるい仕様(コメントOK、シングルクォートOKなど)
BSON(Binary JSON)
MongoDBで使われてる形式で、JSONの構造をバイナリで高速化したもの。
YAML(Yet Another Markup Language)
見た目は柔らかいが、構文が複雑で人間には優しいが機械には厳しい。JSONよりエラーが出やすい。
HJSON(Human JSON)
コメントあり、カンマ不要など、さらに人間寄りにチューニングしたJSON派生。
7. 未来はどうなる?
現在、JSONはほぼ完成されたデータ形式ですが、より高速・効率的なバイナリ形式(MessagePack、Avro、Protobufなど)も登場しています。
ただ、可読性ではやはりJSONが王者。
個人開発から大規模分散システムまで、JSONは「理解される」からこそ支持され続けているのです。
8. JSON雑学まとめ
- JSONの生みの親はDouglas Crockford。彼が「この形式シンプルで良くね?」って広めた。
JSON.stringify()には第二引数でフィルターや整形が可能!- JSONはJavaScriptでevalしなくても安全にパースできるというセキュリティ的メリットも注目された。
- JSONが普及したのはAJAXの流行とも関係深い。(非同期通信で扱いやすかった)
参考文献・リンク
- wikipedia
- Qiita
- RFC 8259 – The JavaScript Object Notation (JSON) Data Interchange Format
https://tools.ietf.org/html/rfc8259 - Douglas Crockford – JSON.org
https://www.json.org - MDN Web Docs – JSON
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON - GitHub: JSON5
https://json5.org - MongoDB Documentation – BSON
https://www.mongodb.com/docs/manual/reference/bson-types/
最後に
JSONは「ただのフォーマット」以上の存在です。JavaScriptから生まれ、言語の垣根を越え、今やあらゆるデータの「共通語」。
このシンプルさにして最強。JSON、恐るべし。