·8分で読めます

JSONとは?初心者向け完全ガイド

JSONはAPIs、config files、databasesなど、あらゆる場所で使われています。webで最も人気のあるdata interchange formatについて、知っておきたい基本をまとめます。

JSONとは?

JSONJavaScript Object Notationの略です。軽量なtext-based data interchange formatで、人間にとって読み書きしやすく、machinesにとってもparseやgenerateが簡単です。

名前に"JavaScript"が含まれていますが、JSONはlanguage-independentなformatです。Python、Java、C#、Go、Ruby、PHPなど、ほぼすべてのmodern programming languageでnative supportまたはlibrariesを通じて利用できます。

JSONは2つの普遍的なdata structuresを土台にしています。

  • Objects - dictionaryやhash mapのようなkey/value pairsのcollection
  • Arrays - valuesのordered list

JSONの簡単な歴史

JSONは2000年代初頭にDouglas Crockfordによって広く知られるようになりました。彼はformatをゼロから発明したというより、data exchangeに非公式に使われていたJavaScript literal syntaxのsubsetを発見し、formalizeしました。

JSONは2013年にECMA-404としてstandardizedされ、IETFのRFC 8259でも説明されています。そのsimpleさにより、web APIsやconfiguration filesの主要formatとしてXMLを急速に置き換えました。

JSON Syntax Rules

JSONのsyntaxはとてもsimpleで、rulesは少数です。

  • Dataはkey/value pairsとして書き、colonで区切ります。
  • Keysはdouble quotesで囲んだstringsでなければなりません。single quotesはvalidではありません。
  • Data itemsはcommasで区切ります
  • Curly braces {} はobjectsを保持します。
  • Square brackets [] はarraysを保持します。
  • Trailing commasは許可されません。
  • standard JSONではcommentsは許可されません。

JSON Data Types

JSONは6つのdata typesをsupportします。

TypeDescriptionExample
Stringdouble quotesで囲まれたtext"hello"
Numberintegerまたはfloating point42, 3.14
Booleantrueまたはfalseのvaluetrue, false
Nullempty/no valuenull
Objectcurly braces内のkey/value pairs{"a": 1}
Arraysquare brackets内のordered list[1, 2, 3]

JSONはundefined、functions、dates、またはNaNInfinityのようなspecial number valuesをsupportしません

JSON Example

user profileを表すJSON objectの実用的なexampleです。

{
  "name": "Jane Smith",
  "age": 28,
  "email": "jane@example.com",
  "isVerified": true,
  "address": {
    "street": "123 Main St",
    "city": "San Francisco",
    "state": "CA",
    "zip": "94102"
  },
  "hobbies": ["reading", "hiking", "photography"],
  "subscription": null
}

このexampleではstrings、numbers、booleans、nested objects、arrays、null valuesが使われており、JSONの主要data typesを確認できます。

JSON vs XML

JSONがmainstreamになる前は、XMLがdata interchangeのstandard formatでした。比較すると次のようになります。

FeatureJSONXML
Readabilityとても読みやすいverboseでscanしにくい
File size小さいtagsがあるため大きい
ParsingJavaScriptでnativeparserが必要
Data typesstrings, numbers, booleans, nullすべてstring
Commentssupportなしsupportあり
SchemaJSON Schema (optional)XSD, DTD

JSONが人気を得た主な理由は、よりsimpleでlightweightであり、多くのprogramming languagesで使われるdata structuresに自然に対応するからです。

JSONはどこで使われる?

JSONはsoftware industry全体で広く使われています。

  • REST APIs - 大半のweb APIsはrequestとresponse formatとしてJSONを使います。
  • Configuration files - npm (package.json)、TypeScript (tsconfig.json)、VS CodeなどのtoolsはconfigにJSONを使います。
  • NoSQL databases - MongoDBやCouchDBのようなdatabasesはJSON-like documentsとしてdataを保存します。
  • Web storage - browsersはlocalStoragesessionStorageでJSON serializationを使います。
  • Data interchange - microservicesやdistributed systemsはJSON messagesで通信します。
  • Logging - structured logging formatsでは、parseやanalysisをしやすくするためJSONがよく使われます。

よくあるJSONの間違い

経験豊富なdevelopersでも、次のようなJSON errorsを起こします。

single quotesを使う

{ 'name': 'John' }

JSONではkeysとstring valuesの両方にdouble quotesが必要です。

Trailing commas

{ "a": 1, "b": 2, }

最後のitemの後のcommaはvalid JSONではありません。

quotesなしのkeys

{ name: "John" }

Keysは必ずdouble quotesで囲む必要があります。

JSON内のcomments

{ "name": "John" // this is a comment }

standard JSONはcommentsをsupportしません。必要ならJSONCやJSON5を使います。

JSONを扱う

JavaScriptでは、2つのbuilt-in methodsでJSONをparse/createできます。

// Parse a JSON string into a JavaScript object
const data = JSON.parse('{"name": "Jane", "age": 28}');
console.log(data.name); // "Jane"

// Convert a JavaScript object to a JSON string
const json = JSON.stringify({ name: "Jane", age: 28 });
console.log(json); // '{"name":"Jane","age":28}'

// Pretty-print with 2-space indentation
const pretty = JSON.stringify(data, null, 2);
console.log(pretty);

JSON dataを扱うときは、適切にvalidate and formatすることが重要です。malformed JSONはdebugしにくいparsing errorsを引き起こすことがあります。

JSONをFormat & Validate

無料のJSON Formatter toolで、JSON dataをbrowser内ですぐにformat、validate、minifyできます。dataはserverへuploadされません。

JSON Formatterを試す

参考資料

  1. ECMA International. (2017). ECMA-404: The JSON Data Interchange Syntax, 2nd Edition. https://ecma-international.org/publications-and-standards/standards/ecma-404/
  2. Bray, T. (2017). The JavaScript Object Notation (JSON) Data Interchange Format. RFC 8259, IETF. https://datatracker.ietf.org/doc/html/rfc8259
  3. Mozilla Developer Network. JSON - JavaScript. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON
  4. Crockford, D. Introducing JSON. https://www.json.org/json-en.html
  5. JSON Schema. JSON Schema Specification. https://json-schema.org/specification