GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • メインページ
  • コミュニティ・ポータル
  • 最近の出来事
  • 新しいページ
  • 最近の更新
  • おまかせ表示
  • 練習用ページ
  • アップロード (ウィキメディア・コモンズ)
  • 特別ページ
  • ヘルプ
  • 利用案内
  • 井戸端
  • お知らせ
  • バグの報告

This view

  • Original page
  • New address

GeezerVison is showing ja.wikipedia.org — JSON - Wikipedia

(JavaScript Object Notationから転送)
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。 出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?: "JSON" – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL
(2025年12月)
JSON
拡張子 .json
MIMEタイプ application/json
種別 Data interchange
国際標準 IETF STD 90
RFC 8259
ECMA-404 2nd edition
ISO/IEC 21778:2017

JSON(ジェイソン、JavaScript Object Notation)はデータ記述言語の1つである。軽量なテキストベースのデータ交換用フォーマットでありプログラミング言語を問わず利用できる[1]。名称と構文はJavaScriptにおけるオブジェクトの表記法に由来する。

特徴

JSONはウェブブラウザなどでよく使われているECMA-262, revision 3準拠のJavaScript[2] (ECMAScript) をベースとしている。2006年7月にRFC 4627で仕様が規定され、その後、何度か改定され、2017年12月14日[3]にIETF STD 90およびRFC 8259およびECMA-404 2nd editionが発表された。MIMEタイプは application/json、拡張子はjsonとされた。

IETFおよびECMAおよびISOの仕様の改定の歴史

  • 2006年7月 - RFC 4627
  • 2013年3月 - RFC 7158
  • 2013年10月 - ECMA-404 1st edition
  • 2014年3月 - RFC 7159
  • 2017年11月30日 - ISO/IEC 21778:2017
  • 2017年12月14日[3] - RFC 8259 および IETF STD 90 および ECMA-404 2nd edition

JSONはJavaScriptにおけるオブジェクト表記法のサブセットであるが、JavaScript以外の言語でも読み込み・書き込みが提供されている。そのため、ウェブアプリケーションでのサーバとクライアントの間でのデータの受渡しなど、プログラミング言語が異なるプログラミング言語同士での通信でよく使われる。

JavaScriptでJSONを読み込むには、文字列をJavaScriptのコードとして解釈する eval 関数を使うだけでよい。JSONの登場当時は、広く普及した言語であるJavaScriptで簡単に読み込めるため、開発者達から注目を浴びた。現在ではeval にはセキュリティ上の問題があるため、専用のJSON.parse 関数を使うべきである。

JSONの発見

ダグラス・クロックフォードはJavaScriptのプログラマで、JSONを広めた一人だが、「The JSON Saga」と題したプレゼンテーション[4]中で「自分はJSONと名付けたが、考案者ではなく、それ自体は“自然に”存在していたもので、早い例としては1996年にはNetscape Navigatorでデータ交換用に使われていた。だから“発見した”ということになるのだが、発見したのも自分が最初ではない」といったように述べている。以上のことを縮めて「JavaScriptのオブジェクト表記法からJSONが発見された。」と表現されている場合がある。

表記方法

JSONで表現するデータ型は以下の通りで、これらを組み合わせてデータを記述する[5]。true, false, null などは全て小文字でなくてはならない。

  • オブジェクト(順序づけされていないキーと値のペアの集まり。JSONでは連想配列と等価)
  • 配列(データのシーケンス)
  • 数値(整数、浮動小数点数)
  • 文字列(バックスラッシュによるエスケープシーケンス記法を含む、ダブルクォーテーション"でくくった文字列)
  • 真偽値(true と false)
  • null

数値は10進法表記に限り、8進、16進法表記などはできない。また浮動小数点数としては 1.0e-10 といった指数表記もできる。精度にかかる仕様や要求はなく、表記された値の取扱精度は実装に依存する。無限大およびNaNの表記はできない。

文字列は(JSONそれ自体と同じく)Unicode文字列である。基本的にはJavaScriptの文字列リテラルと同様だが、囲むのにシングルクォートは使えない。バックスラッシュによるエスケープがある。

配列はゼロ個以上の値をコンマで区切って、角かっこでくくることで表現する。例えば以下のように表現する:

["milk", "bread", "eggs"]

オブジェクトはキーと値のペアをコロンで対にして、これらの対をコンマで区切ってゼロ個以上列挙し、全体を波かっこでくくることで表現する。例えば以下のように表現する:

{"name": "John Smith", "age": 33}

ここで注意することはキーとして使うデータ型は文字列に限ることである。したがって、

{name: "John Smith", age: 33}

という表記は許されない。この後者の表記はJavaScriptのオブジェクトの表記法としては正しいが、JSONとしては不正な表記である。

プログラム上で生成した文字列をJSONとして扱う場合、ダブルクォーテーション"を含む文字列を利用しなければいけないことに注意が必要である。なぜならコード上の"は文字列定義に利用される"であり、生成されるのはあくまで文字列helloであって文字列"hello"ではない。JSONの文字列型は後者であると定義されているので、以下のようにエラーを発生させる。利用時にはJSON生成関数(例 JavaScript: JSON.stringify)を利用する方がより安全である。

const invalidJSON = "hello";
const validJSON =  '"hello"';

JSON.parse(invalidJSON)
// Thrown:
// SyntaxError: Unexpected token h in JSON at position 0
JSON.parse(validJSON)
// 'hello'

// safe JSON generation
const output = JSON.stringify("hello")
output
// '"hello"'

エンコーディング

RFC 8259より、閉じられたエコシステムで利用する場合を除き、文字コードはUTF-8でエンコードすることが必須 (MUST) となっている。ネットワークでJSONを送信する場合は、バイト順マークを先頭に付加してはいけない (MUST NOT)。

過去のIETFの仕様では、JSONテキストはUnicodeでエンコードするとされていた (SHALL)。デフォルトのエンコーディングはUTF-8であった。なお、単独の文字列でない限り最初の2文字は必ずASCII文字であるので、最初の4バイトを見ることにより、UTF-8、UTF-16LE、UTF-16BE、UTF-32LE、UTF-32BEのいずれの形式でエンコードされているか判別できた。

AjaxにおけるJSONの利用

AjaxにおいてXMLHttpRequestで非同期にJSONでのデータを受け取る例を示す:

古典的な例

var the_object;
var http_request = new XMLHttpRequest();
http_request.open( "GET", url, true );
http_request.onreadystatechange = function () {
    if ( http_request.readyState == 4 ) {
        if ( http_request.status == 200 ) {
            the_object = eval( "(" + http_request.responseText + ")" );
        } else {
            alert( "There was a problem with the URL." );
        }
        http_request = null;
    }
};
http_request.send(null);

新しい記法を利用した例

var the_object;
var http_request = new XMLHttpRequest();
http_request.open( "GET", url, true );
http_request.responseType = "json";
http_request.addEventListener ( "load", function ( ev ) {
    if ( ev.target.status == 200 ) {
        the_object = http_request.response;
    } else {
        alert( "There was a problem with the URL." );
    }
    delete http_request;
});
http_request.send(null);

ここでいずれも、http_request はXMLHttpRequestオブジェクトであり、それを url にアクセスして返ってきたJSONで記述されたデータを the_object に格納される。いま、XMLHttpRequestを用いて実装をしたが、iframeなどの他の実装方法もある。また、JavaScriptライブラリのprototype.jsではHTTPの X-JSON ヘッダを利用して簡単にJSONデータの受渡しができる。

ライブラリ

JSONは多くのプログラミング言語で利用可能なライブラリなどが提供されている。例えば、ActionScript, C, C++, C#, ColdFusion, Common Lisp, Curl, D, Delphi, E, Elixir, Erlang, Groovy, Haskell, Java, JavaScript (ECMAScript), Lisp, Lua, ML, Objective-C, Objective CAML, Perl, PHP, Python, R, Rebol, Ruby, Scala, Squeakなど。

ただし、テキストファイル、データを交換する手段を持つプログラミング言語であれば自力でパースして入力したり、フォーマット処理で出力は可能である。

JSONPath

JSONPath は JSON のクエリ式で、JSON の一部分を示すことが出来る。XML の XPath に対応するものとして Stefan Gössner が2007年に提案し[6]、2024年2月にRFC 9535として仕様が制定された。様々なプログラミング言語でライブラリが実装されている[7]。データベースでは、Oracle Database[8]、Microsoft SQL Server[9]、MySQL[10]、PostgreSQL[11]、MongoDB[12]、RedisJSON[13]など広く採用されている。

例として、下記 JSON に対する、$.users[0:2].name の結果は ["Foo", "Bar"] になる。

{
    "users": [
        {"name": "Foo"},
        {"name": "Bar"},
        {"name": "Baz"}
    ]
}

改行区切りのJSON

1行を1つのJSONとする改行区切りのJSONが複数の人によって提案されている。仕様は同一である。改行コードは \n を使わなければならないが、JSON の末尾に \r があっても無視されることから \r\n も利用可能である。

  • JSON Lines (JSONL)[14] - 拡張子は .jsonl 、MIMEタイプは application/jsonl
  • Newline delimited JSON (NDJSON)[15](旧称 Line delimited JSON, LDJSON[16])- 拡張子は .ndjson 、MIMEタイプは application/x-ndjson

Comma-Separated Values よりも柔軟性がある。また、JSONの配列を使うよりも可読性があるうえ、ストリーミングにすることができる。以下は例。

{"ts":"2020-06-18T10:44:12","started":{"pid":45678}}
{"ts":"2020-06-18T10:44:13","logged_in":{"username":"foo"},"connection":{"addr":"1.2.3.4","port":5678}}
{"ts":"2020-06-18T10:44:15","registered":{"username":"bar","email":"[email protected]"},"connection":{"addr":"2.3.4.5","port":6789}}
{"ts":"2020-06-18T10:44:16","logged_out":{"username":"foo"},"connection":{"addr":"1.2.3.4","port":5678}}

JSON5

ECMAScript 5.1 に基づき、人間にとってより読み書きしやすい JSON5 が提案されている。コメントを書けたり、オブジェクトのキーは " が不要だったり、末尾カンマを付けられたりする。拡張子は .json5 、MIMEタイプは application/json5 。[17]

// コメント
{a: 1,}

JSONC

JSONC (JSON with Comments) は JSON と JSON5 の中間で、コメントが書け、末尾カンマがつけられる。JSON5 とは異なり、オブジェクトのキーの " は省略できない。拡張子は .jsonc 、MIMEタイプは application/jsonc 。[18]

他のデータ記述法との関係

XML
JSONはXMLと違ってマークアップ言語ではない。ウェブブラウザから利用できるという点では共通している。また両者とも巨大なバイナリデータを扱う仕組みがないことが共通している。
YAML
JSONはYAMLのサブセットと見なしてよい[19]。YAMLにはブロック形式とインライン形式(フロー形式)の表記法があるが、JSONは後者にさらに制約を加えたものと捉えることができる。例えばRubyでは以下のようにしてJSONをYAMLとして読み込むことができる:
the_object = YAML.load('{"name": "John Smith", "age": 33}')
YAML 1.1以前は、配列と連想配列の区切りをそれぞれ , のようにカンマ+スペースの形にすることでJSONのスーパーセットとなったが、YAML 1.2では区切り文字も互換となったため、正常なJSON文書においては公式に完全なスーパーセットとなった。僅かな相違点として、連想配列のキーがユニークであるべきことをJSONではSHOULDレベルで要請するのに対し、YAML 1.2ではMUSTレベルで要請している[20]為、該当する異常データのエラーハンドリングに違いが出る可能性はある。

脚注

  1. ↑ JSON is a lightweight, text-based, language-independent syntax for defining data interchange formats. ECMA-404
  2. ↑ “Introducing JSON”. json.org. 2008年4月19日閲覧。
  3. 1 2 ongoing by Tim Bray · The Last JSON Spec
  4. ↑ Douglas Crockford: The JSON Saga - YouTube
  5. ↑ A JSON value can be an object, array, number, string, true, false, or null. ECMA-404
  6. ↑ “JSONPath - XPath for JSON”. goessner.net. 2023年6月8日閲覧。
  7. ↑ “JSONPath Comparison”. cburgmer.github.io. 2024年5月10日閲覧。
  8. ↑ “JSON Developer's Guide”. Oracle Help Center. 2023年6月8日閲覧。
  9. ↑ jovanpop-msft. “JSON Path Expressions - SQL Server”. learn.microsoft.com. 2023年6月8日閲覧。
  10. ↑ “MySQL :: MySQL 8.0 Reference Manual :: 11.5 The JSON Data Type”. dev.mysql.com. 2023年6月8日閲覧。
  11. ↑ PostgreSQL: Documentation: 15: 9.16. JSON Functions and Operators
  12. ↑ “json-path Output Type — MongoDB Command Line Interface”. mongodb.com. 2023年6月8日閲覧。
  13. ↑ “Path”. Redis. 2023年6月8日閲覧。
  14. ↑ “JSON Lines”. jsonlines.org. 2024年7月4日閲覧。
  15. ↑ “ndjson/ndjson-spec: Specification”. 2024年7月4日閲覧。
  16. ↑ Update specification_draft2.md · ndjson/ndjson-spec@c658c26
  17. ↑ “JSON5 – JSON for Humans”. JSON5. 2023年5月31日閲覧。
  18. ↑ “JSONC”. JSONC. 2026年7月31日閲覧。
  19. ↑ “YAML is JSON”. 2009年7月22日時点のオリジナルよりアーカイブ。2013年5月15日閲覧。
  20. ↑ “3.2.1. Representation Graph - YAML Ain’t Markup Language (YAML™) Version 1.2”. yaml.org. 2013年5月15日閲覧。

関連項目

  • Ajax
  • JSONP
  • JSON Schema
  • JSON-RPC
  • JSON Web Token
  • Jaql
  • MooTools
  • コンピュータ言語

外部リンク

  • Introducing JSON (英語)
    • JSONの紹介 (日本語)
  • IETFの仕様書
    • IETF STD 90 および RFC 8259
    • 古い廃止された仕様書
      • RFC 4627 (英語)
      • RFC 7158 (英語)
      • RFC 7159 (英語)
  • ECMA-404 (英語)
  • ISO/IEC 21778:2017 (英語)
データ交換フォーマット
対人可読フォーマット
  • Atom
  • CSV
  • EDIFACT
  • JSON
    • Web Encryption
    • Web Token
    • Web Signature
  • プロパティリスト
  • RDF
  • Rebol
  • TOML
  • XML
  • YAML
バイナリフォーマット
  • AMF
  • Ascii85
  • ASN.1
    • SMI
  • Avro
  • Base32
  • Base64
  • Bencode
  • BSON
    • UBJSON
  • Cap'n Proto
  • CBOR
  • FlatBuffers
  • MessagePack
  • プロパティリスト
  • Protocol Buffers
  • Thrift
  • Cyphal DSDL
  • XDR
  • uuencode
  • yEnc
JavaScript
概念
  • 文法
  • JavaScriptライブラリ
  • 控えめなJavaScript
エンジン
  • Carakan/Futhark/Linear B
  • Chakra
  • JavaScriptCore
  • JScript
  • KJS
  • Narcissus
  • Nashorn
  • Rhino
  • SpiderMonkey
  • V8
コンパイラ
  • AtScript
  • Babel
  • ClojureScript
  • CoffeeScript
  • Emscripten
  • Google Closure Compiler
  • Google Web Toolkit
  • Haxe
  • JSX
  • Kotlin
  • Nim
  • PureScript
  • TypeScript
デバッガ
  • Firebug
  • Google Chrome Developer Tools
  • Internet Explorer Developer Tools
  • Opera Dragonfly
  • Visual Studio
    • Visual Studio Express
  • Visual Studio Code
  • Web Inspector
エディタ
  • Atom
  • Brackets
  • Visual Studio
    • Visual Studio Express
  • Light Table
  • Visual Studio Code
  • WebStorm
サーバーサイド
  • Active Server Pages
  • Bun
  • CommonJS
  • Deno
  • Node.js
  • Vert.x
  • Wakanda
フレームワーク
・ライブラリ
  • Angular/AngularJS
  • Astro
  • Backbone.js
  • Dojo
  • Express.js
  • Ext JS
  • Google Web Toolkit
  • jQuery
    • Mobile
  • KaTeX
  • MathJax
  • MochiKit
  • MooTools
  • Prototype
  • React
  • Vue.js
  • YUI ライブラリ
  • SolidJS
  • Svelte
  • Hono
  • ElysiaJS
  • Qwik
ユニットテスト
  • Jasmine
  • Jest
  • Mocha
  • QUnit
  • ユニットテスト・フレームワーク一覧
Docジェネレータ
  • JSDoc
コード解析
  • ESLint
  • JSHint
  • JSLint
パッケージ管理
  • npm
  • NuGet
アプリケーション
バンドラー
  • Webpack
  • Vite
  • esbuild
関連技術
  • Ajax
  • CSS
  • DHTML
  • DOM
  • HTML
  • JSON
  • JSONP
  • WebAssembly
  • asm.js
人物
  • ジョン・レシグ
  • ダグラス・クロックフォード
  • ブレンダン・アイク
  • ライアン・ダール
  • カテゴリ カテゴリ
  • コモンズ コモンズ
  • ウィキブックス ウィキブックス
  • ポータル Portal:コンピュータ
ECMAScript
方言
  • ActionScript
  • DMDScript
  • JavaScript
    • asm.js
  • JScript
  • TypeScript
  • WMLScript
エンジン
  • Carakan/Futhark/Linear B
  • Chakra
  • JavaScriptCore
  • JScript
  • KJS
  • Narcissus
  • Rhino
  • SpiderMonkey
  • V8
フレームワーク
・ライブラリ
クライアントサイド
  • Dojo
  • Ext JS
  • Google Web Toolkit
  • jQuery
  • MochiKit
  • MooTools
  • Prototype
  • YUI Library
サーバーサイド
  • Jaxer
  • Deno
  • Node.js
ライブラリ
  • Backbone.js
  • Underscore.js
人物
  • ブレンダン・アイク
  • ダグラス・クロックフォード
  • ジョン・レシグ
  • スコット・アイザックス
  • ライアン・ダール
その他
  • AMD
  • CommonJS
  • DHTML
  • E4X
  • Ecmaインターナショナル
  • JSDoc
  • JSGI
  • JSHint
  • JSLint
  • JSON
  • JSSS
「https://ja.wikipedia.org/w/index.php?title=JSON&oldid=111718326」から取得
カテゴリ:
  • JSON
  • データシリアライゼーションフォーマット
  • JavaScript
  • RFC
  • ISO/IEC標準
  • プログラミング言語の構文
  • オープンフォーマット
隠しカテゴリ:
  • 出典を必要とする記事/2025年12月
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.