JavaScript Object Notation
JavaScript Object Notation(通称:JSON(ジェイソン))は、主にJavaScriptで用いられるデータ記述言語のひとつ。
ただし、名称にも含まれるJavaScript専用というわけではなく、他プログラミング言語やソフトウェア上でも使用可能な汎用設計が為されている。
決して13日の金曜日にチェーンソー持って走り回る仮面の男の本名ではない。
歴史[編集]
元々はJavaScriptベースの派生言語であるため、正式名称にもその名を残す。2006年7月のRFC 4627が仕様決定の最古である。
2013年から2014年までに3回の改訂を経て、2017年12月現在の最新仕様はRFC 8259となっている。
注記するまでもない当たり前のことだが、国際標準規格であり、MIMEタイプはapplication/json
、拡張子はjson
と決まっている。
特徴[編集]
JSONは単純なJavaScriptオブジェクトサブセットであるため、JavaScriptでJSONをパースして読み込むだけでよい。このようにごく単純なやり方でサブセットを利用可能であるために、特にウェブブラウザ搭載言語として著名なAjax の開発者たちから注目を浴び、同分野での利用が活発である。
用途をJavaScript外に向けても、上述のように書き出し、読み込みについての処理が至極単純化されている利点があるため実装先を選ばず、あまりにも多すぎるのでいちいち列挙しないが、ありとあらゆるプログラミング言語に実装された実績を持つ。その数、20言語以上。
実際、異なるプログラミング言語間でのJSONを用いたデータの受け渡しは非常に効率的となる。2019年現在、WebAPIのデータ形式としては、デファクトスタンダードである[1]。
オブジェクトとJSONの相互変換[編集]
JSONデータは、直接文字列として作成することもできるが、JSONライブラリーが提供されているのであればそれを使ってオブジェクトとJSON文字列の相互変換を行うのが望ましい。
JavaScriptの場合は、Google Chromeのデベロッパーツールに含まれるConsole機能を使うと以下のように確認できる。他のWebブラウザーでも同様のことが可能。
> x = { 'count': 1, 'name': "abc", 'now': new Date(), 'list': ["X", "Y", "Z"]}
< {count: 1, name: "abc", now: Sun Dec 15 2019 22:11:08 GMT+0900 (日本標準時), list: Array(3)}
> JSON.stringify(x)
< "{"count":1,"name":"abc","now":"2019-12-15T13:11:08.411Z","list":["X","Y","Z"]}"
> JSON.parse('{"count":1,"name":"abc","now":"2019-12-15T13:11:08.411Z","list":["X","Y","Z"]}')
< {count: 1, name: "abc", now: "2019-12-15T13:11:08.411Z", list: Array(3)}
他の言語でもJSONライブラリーが提供されているのであれば、それを利用する。
以下はPythonの例。
import json
from datetime import date, datetime
def _to_json(obj):
if isinstance(obj, (date, datetime)): # date, datetimeは既定機能ではダンプできない
return obj.isoformat()
raise TypeError("%s is not JSON serializable at _to_json" % obj)
x = {'count': 1, 'name': "abc", 'now': datetime.now(), 'list': ["X", "Y", "Z"]}
# オブジェクト→JSON文字列
print(json.dumps(x, default=_to_json))
# JSON文字列→オブジェクト
print(json.loads('{"count":1,"name":"abc","now":"2019-12-15T13:11:08.411Z","list":["X","Y","Z"]}'))
参考文献[編集]
脚注[編集]
- ↑ WebAPIの実装は、HTTP通信をプログラム可能な言語であれば向き不向きはともかく理論上は可能である。後は、言語内のデータ形式とJSONとの間での相互変換が可能であれば、JSONを用いた通信が可能となる。