JSONとは?初心者向け完全ガイド
JSONはAPIs、config files、databasesなど、あらゆる場所で使われています。webで最も人気のあるdata interchange formatについて、知っておきたい基本をまとめます。
目次
JSONとは?
JSONはJavaScript 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します。
| Type | Description | Example |
|---|---|---|
| String | double quotesで囲まれたtext | "hello" |
| Number | integerまたはfloating point | 42, 3.14 |
| Boolean | trueまたはfalseのvalue | true, false |
| Null | empty/no value | null |
| Object | curly braces内のkey/value pairs | {"a": 1} |
| Array | square brackets内のordered list | [1, 2, 3] |
JSONはundefined、functions、dates、またはNaNやInfinityのような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でした。比較すると次のようになります。
| Feature | JSON | XML |
|---|---|---|
| Readability | とても読みやすい | verboseでscanしにくい |
| File size | 小さい | tagsがあるため大きい |
| Parsing | JavaScriptでnative | parserが必要 |
| Data types | strings, numbers, booleans, null | すべてstring |
| Comments | supportなし | supportあり |
| Schema | JSON 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は
localStorageやsessionStorageで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を試す参考資料
- ECMA International. (2017). ECMA-404: The JSON Data Interchange Syntax, 2nd Edition. https://ecma-international.org/publications-and-standards/standards/ecma-404/
- Bray, T. (2017). The JavaScript Object Notation (JSON) Data Interchange Format. RFC 8259, IETF. https://datatracker.ietf.org/doc/html/rfc8259
- Mozilla Developer Network. JSON - JavaScript. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON
- Crockford, D. Introducing JSON. https://www.json.org/json-en.html
- JSON Schema. JSON Schema Specification. https://json-schema.org/specification