JavaScript Object Notation

JSON
拡張子.json
MIMEタイプapplication/json
種別Data interchange
国際標準IETF STD 90
RFC 8259
ECMA-404 2nd edition
ISO/IEC 21778:2017

JavaScript Object NotationJSON、ジェイソン)はデータ記述言語の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の仕様の改定の歴史

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では連想配列と等価)
  • 配列(データのシーケンス)
  • 数値(整数浮動小数点数
  • 文字列(バックスラッシュによるエスケープシーケンス記法を含む、ダブルクォーテーション"でくくった文字列)
  • 真偽値(truefalse
  • null

数値は10進法表記に限り、8進、16進法表記などはできない。また浮動小数点数としては 1.0e-10 といった指数表記もできる。

文字列は(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ではHTTPX-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,}

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

XML
JSONはXMLと違ってマークアップ言語ではない。ウェブブラウザから利用できるという点では共通している。また両者とも巨大なバイナリデータを扱う仕組みがないことが共通している。
YAML
JSONはYAMLのサブセットと見なしてよい[18]。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レベルで要請している[19]為、該当する異常データのエラーハンドリングに違いが出る可能性はある。

出典

  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. ^ a b 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. 8 June 2023閲覧。
  7. ^ JSONPath Comparison”. cburgmer.github.io. 10 May 2024閲覧。
  8. ^ JSON Developer's Guide”. Oracle Help Center. 8 June 2023閲覧。
  9. ^ jovanpop-msft. “JSON Path Expressions - SQL Server”. learn.microsoft.com. 8 June 2023閲覧。
  10. ^ MySQL :: MySQL 8.0 Reference Manual :: 11.5 The JSON Data Type”. dev.mysql.com. 8 June 2023閲覧。
  11. ^ PostgreSQL: Documentation: 15: 9.16. JSON Functions and Operators
  12. ^ json-path Output Type — MongoDB Command Line Interface”. mongodb.com. 8 June 2023閲覧。
  13. ^ Path”. Redis. 8 June 2023閲覧。
  14. ^ JSON Lines”. jsonlines.org. 4 July 2024閲覧。
  15. ^ ndjson/ndjson-spec: Specification”. July 4, 2024閲覧。
  16. ^ Update specification_draft2.md · ndjson/ndjson-spec@c658c26
  17. ^ JSON5 – JSON for Humans”. JSON5. 31 May 2023閲覧。
  18. ^ YAML is JSON”. 2009年7月22日時点のオリジナルよりアーカイブ。2013年5月15日閲覧。
  19. ^ 3.2.1. Representation Graph - YAML Ain’t Markup Language (YAML™) Version 1.2”. yaml.org. 2013年5月15日閲覧。

関連項目

外部リンク

Read other articles:

Tugu Kemenangan Berlin di Tiergarten. Tugu Kemenangan Berlin (Bahasa Jerman: Berliner Siegessäule) adalah monumen yang terletak di jantung kota Berlin, Jerman. Tugu ini tepatnya berada di taman kota Tiergarten dan dekat dari ikon kota Berlin yaitu Gerbang Bradenburg. Desain monumen ini dibuat oleh Heinrich Strack, konstruksi pertama dibangun pada tahun 1864 untuk memperingati kemenangan Prusia atas Denmark dalam Perang Prusia-Denmark (1 Februari – 30 Oktober 1864).[1][2] da...

 

Dalam cerita Alkitab Tangga Yakub, Yakub bermimpi soal tangga menuju surga. Seorang karakter yang memiliki mimpi adalah cara umum untuk menambahkan cerita dalam pada cerita yang lebih besar. (Lukisan karya William Blake, 1805) Cerita dalam cerita, juga disebut sebagai cerita selipan, adalah sebuah perangkat sastra dimana sebuah karakter dalam sebuah cerita menjadi narator cerita kedua (dalam cerita pertama).[1] Lapisan cerita berganda dalam cerita terkadang disebut cerita bersarang. S...

 

United States historic placeH. E. Gensky Grocery Store BuildingU.S. National Register of Historic Places Show map of MissouriShow map of the United StatesLocation423 Cherry St., Jefferson City, MissouriCoordinates38°34′7″N 92°9′54″W / 38.56861°N 92.16500°W / 38.56861; -92.16500Arealess than one acreBuilt1915 (1915)Built bySchmidli, JosephArchitectural styleEarly CommercialNRHP reference No.01000628[1]Added to NRHPJune 6, 2001 H. ...

Paruh-perak Euodice Indian silverbill (Euodice malabarica)TaksonomiKerajaanAnimaliaFilumChordataKelasAvesOrdoPasseriformesFamiliEstrildidaeGenusEuodice Reichenbach, 1862 SpeciesSee text.lbs Euodice atau paruh-perak adalah genus burung pemakan biji kecil dalam keluarga Estrildidae . Spesies ini berasal dari zona kering di Afrika dan India dan biasa. Mereka dahulunya termasuk dalam genus Lonchura . Taksonomi Image Common Name Scientific name Distribution Paruh-perak Afrika Euodice cantans Centr...

 

Peta perubahan wilayah Amerika Serikat. Amerika Serikat terletak di tengah-tengah benua Amerika Utara, dibatasi oleh Kanada di sebelah utara dan Meksiko di sebelah selatan. Negara Amerika Serikat terbentang dari Samudra Atlantik di pesisir timur hingga Samudra Pasifik di pesisir barat, termasuk kepulauan Hawaii di lautan Pasifik, negara bagian Alaska di ujung utara benua Amerika, dan beberapa teritori lainnya. Penetap pertama wilayah yang kini menjadi Amerika Serikat berasal dari Asia sekitar...

 

Scottish footballer For the actor, see John O'Hare (actor). John O'HarePersonal informationDate of birth (1946-09-24) 24 September 1946 (age 77)Place of birth Renton, ScotlandPosition(s) ForwardYouth career1963–1964 SunderlandSenior career*Years Team Apps (Gls)1964–1967 Sunderland 51 (14)1967 Vancouver Royal Canadians 11 (1)1967–1974 Derby County 248 (65)1974–1975 Leeds United 6 (1)1975–1981 Nottingham Forest 101 (14)1977–1978 Dallas Tornado 40 (14) Belper Town ? (?)Total 41...

Circuit de Reims-GueuxLokasiGueux, FranceZona waktuGMT +1Acara besarGrand Prix de la MarneFrench Grand Prix12 Hours of Reims,1926 Original circuitPanjang7.816 km (4.856 mi)Tikungan8Rekor lap2:27.8 ( Juan Manuel Fangio,   Alfa Romeo 159, 1951, Formula One)1952 VariationPanjang7.152 km (4.444 mi)Tikungan51953 VariationPanjang8.372 km (5.187 mi)Tikungan7Rekor lap2:41.0 ( Juan Manuel Fangio,   Maserati, 1953, Formula One)1954 VariationPanjang8.302 km (5.158 mi)Tikungan7Rekor lap2:11.3 ...

 

2004 Air Canada CupTournament detailsHost country GermanyDates5 – 7 February 2004Teams4Final positionsChampions  Canada U22 (2nd title)Runner-up  GermanyThird place   SwitzerlandTournament statisticsGames played6← 20032005 → The 2004 Air Canada Cup was the second edition of the women's ice hockey tournament. It was held from February 5-7, 2004 in Garmisch-Partenkirchen and Bad Tölz, Germany. The Canadian U22 national team w...

 

Le informazioni riportate non sono consigli medici e potrebbero non essere accurate. I contenuti hanno solo fine illustrativo e non sostituiscono il parere medico: leggi le avvertenze. Muscolo gemello inferioreSi mostrano i Gruppo dei rotatori laterali dell'anca, fra cui il muscolo gemello inferioreAnatomia del Gray(EN) Pagina 477 Originetuberosità ischiatica Inserzionetrochanteric fossa Azioniextrarotazione dell'anca Arteriaarteria gluteale inferiore Nervonervo dei muscoli quadrato del fem...

2009 single by Jay Sean Do You RememberSingle by Jay Sean featuring Sean Paul and Lil Jonfrom the album All or Nothing and the mixtape The Odyssey Mixtape Released3 November 2009RecordedDecember 2008Length3:30Label Jayded 2Point9 Cash Money Universal Republic Songwriter(s) Kamaljit Singh Jhooti Sean Paul Henriques Jonathan Smith Jared Cotter Frankie Storm J-Remy Bobby Bass Jonathan Perkins Producer(s)J-Remy & Bobby BassJay Sean singles chronology Written on Her (2009) Do You Remember ...

 

1975 South Korean film directed by Kim Ho-sun Yeong-ja's HeydaysDirected byKim Ho-sunWritten byJo Seon-jakProduced byKim Tai-sooStarringYeom Bok-sun Song Jae-hoCinematographyJang Seok-junEdited byYoo Jae-wonMusic byJeong Sung-joRelease date February 11, 1975 (1975-02-11) Running time103 minutesCountrySouth KoreaLanguageKorean Yeong-ja's Heydays (Korean: 영자의 전성시대; RR: Yeongja-ui jeonseong sidae) is a 1975 South Korean film directed by Kim Ho-s...

 

  لمعانٍ أخرى، طالع أوغدن (توضيح). أوغدن     الإحداثيات 42°02′24″N 94°01′50″W / 42.04°N 94.030555555556°W / 42.04; -94.030555555556   [1] تقسيم إداري  البلد الولايات المتحدة[2]  التقسيم الأعلى مقاطعة بون  خصائص جغرافية  المساحة 3.538326 كيلومتر مربع3.557336 كيلومتر مر�...

Canadian politician (born 1964) The HonourableCandice BergenPCBergen in 2017Leader of the OppositionIn officeFebruary 2, 2022 – September 10, 2022MonarchsElizabeth IICharles IIIDeputyLuc BertholdPreceded byErin O'TooleSucceeded byPierre PoilievreInterim Leader of the Conservative PartyIn officeFebruary 2, 2022 – September 10, 2022PresidentRobert BathersonDeputyLuc BertholdPreceded byErin O'TooleSucceeded byPierre PoilievreDeputy Leader of the OppositionIn officeSeptember...

 

Il figlio di DraculaTitolo originaleSon of Dracula Lingua originaleinglese Paese di produzioneStati Uniti d'America Anno1943 Durata80 min Dati tecnicib/n Genereorrore RegiaRobert Siodmak Ford Beebe (regista 2ª unità) SceneggiaturaEric Taylor ProduttoreFord Beebe Casa di produzioneUniversal Pictures TruccoJack Pierce Interpreti e personaggi Lon Chaney Jr.: Il conte Alucard J. Edward Bromberg: professor Lazlo Robert Paige: Frank Stanley Louise Allbritton: Katherine Caldwell Evelyn Ankers: Cla...

 

This article is part of a series on the History of the United Arab Emirates Bronze Age Magan civilization Umm Al Nar culture Archaeological sites Mleiha Al Ashoosh Al Sufouh Ed-Dur Hili Saruq Al Hadid Shimal Tell Abraq Iron Age Wadi Suq culture Archaeological sites Al Thuqeibah Bidaa Bint Saud Ed-Dur Muweilah Seih Al Harf Qattara Oasis Rumailah Saruq Al Hadid Shimal Tell Abraq Pre-Islamic Era Sasanian rule Archaeological sites Ed-Dur Islamic Era Battle of Dibba Colonial Era Portuguese Dibba ...

Room where administrative work is performed For other uses, see Office (disambiguation). This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Office – news · newspapers · books · scholar · JSTOR (May 2024) (Learn how and when to remove this message) Midtown Manhattan in New York City is the largest central busine...

 

The examples and perspective in this article may not represent a worldwide view of the subject. You may improve this article, discuss the issue on the talk page, or create a new article, as appropriate. (August 2021) (Learn how and when to remove this message) Chlorpyrifos Names Preferred IUPAC name O,O-Diethyl O-(3,5,6-trichloropyridin-2-yl) phosphorothioate Other names Brodan, Bolton insecticide, Chlorpyrifos-ethyl, Cobalt, Detmol UA, Dowco 179, Dursban, Empire, Eradex, Hatchet, Lorsban, Nu...

 

Indonesian traditional fermented milk DadiahPlace of originIndonesiaRegion or stateWest SumatraMain ingredientsBuffalo milk Dadiah (Minangkabau) or dadih (Indonesian and Malaysian Malay) a traditional fermented milk popular among people of West Sumatra, Indonesia, is made by pouring fresh, raw, unheated, buffalo milk into a bamboo tube capped with a banana leaf and allowing it to ferment spontaneously at room temperature for two days. The milk is fermented by indigenous lactic bacteria found ...

Gendarmerie of the Democratic Republic of Afghanistan SarandoySarandoy gendarmes at a checkpoint (LIFE magazine)Active1978–1992CountryAfghanistanAllegianceDemocratic Republic of AfghanistanBranchMinistry of Interior AffairsTypeGendarmerieRoleReserve armyInternal securityAnti-tank warfareCounter-insurgencyCounter-intelligenceCovert operationDesert warfareMountain warfareExecutive protectionForce protectionHUMINTLaw enforcementManhuntRaidingReconnaissanceSecurity checkpointTrackingTraffic pol...

 

Art school at the University of Oregon This article may rely excessively on sources too closely associated with the subject, potentially preventing the article from being verifiable and neutral. Please help improve it by replacing them with more appropriate citations to reliable, independent, third-party sources. (December 2014) (Learn how and when to remove this message) University of Oregon College of DesignLawrence Hall, the main building of UO DesignTypePublicEstablished1914DeanAdrian Par...