JSONはJava Script Object Notationの略で、データ構造を表現できるフォーマット。Rubyを含めさまざまな言語で扱うことができ、Web APIなどでよく利用されている。拡張子は.json
。
データ型は6種類
JSONのデータ型は以下の6つだけ。
データ型 | 書式 |
---|---|
オブジェクト | {「名前」:「値」, 「名前」:「値」} |
配列 | [配列] |
文字列 | "文字列" |
数値 | 1 など |
ブーリアン | true または false |
null | null |
オブジェクトは、{
と}
で囲まれていて、「名前」(プロパティ名ともいう)と「値」のセットであるメンバを持つ。Rubyでいうハッシュのような形。
VSCodeの設定ファイル(settings.json)を例として見てみる。
<settings.json> 一部抜粋
{ "editor.fontSize": 13, "editor.tabSize": 2, "hediet.vscode-drawio.local-storage": { ".drawio-config": { "libraries": "general;uml;er;bpmn;flowchart;basic;arrows2", "customLibraries": [ "L.scratchpad" ], "plugins": [], "formatWidth": "240", "createTarget": false, "pageFormat": { "x": 0, "y": 0, "width": 827, "height": 1169 }, "search": true, "showStartScreen": true, "gridColor": "#d0d0d0", "darkGridColor": "#6e6e6e", "autosave": true, "resizeImages": null, "unit": 1, "isRulerOn": false, } }, "files.associations": { "*.erb": "erb" }, "diffEditor.ignoreTrimWhitespace": false }
まず全体が一つのオブジェクトであり、editor.fontSize
、editor.tabSize
、hediet.vscode-drawio.local-storage
、files.associations
、diffEditor.ignoreTrimWhitespace
という5つのメンバを持っている。メンバ間はコンマ,
で区切られる。
このeditor.fontSize
やeditor.tabSize
が「名前」であり、コロン:
で区切られた右側の13
や2
が「値」である。
「名前」は文字列でないとNG
よく見ると、:
の左側の「名前」(プロパティ名)は全て"
で囲まれた文字列であることがわかる。
対して、:
右側の「値」は、配列や文字列、数値、true
、false
、null
、そして{ }
で囲まれるオブジェクトまでいろいろな値が入っている。
メンバの「値」は6つの型のいずれでもOKだが、「名前」は文字列でなければならないのだ。
メンバとプロパティの違い??
この記事を書くにあたり、メンバとプロパティという用語が同じように使われていて混乱したので少し調べた。
JavaScriptでは、オブジェクトが持つデータや機能のことを「メンバ」という。それが関数であればメソッド、データであればプロパティと呼ぶのだが、JSONはメソッドを持てないので、メンバ=プロパティと言っても問題がないようだ。
そういうわけで、JSONのメンバの名前のことをプロパティ名、値のことをデータと呼んだりもするが、特に気にしなくていいということで安心した。
(参考)[JavaScript] オブジェクトの基礎 - Qiita
(参考サイト)JSON データの操作 - ウェブ開発を学ぶ | MDN