Skip to content
Latchkey

JSONとは? JavaScript Object Notationの解説

JSON(JavaScript Object Notation)は、構造化データをキーと値のオブジェクトおよび順序付き配列として表現する、軽量なテキストベースのフォーマットです。

JSONは現代のWebとCIツールの共通言語です。構造化データ - 名前付きフィールドを持つオブジェクトと値のリスト - を書き留めるためのシンプルで人間が読みやすい方法であり、ほぼすべてのプログラミング言語が読み書きできます。CLIが機械可読な出力を発する場合や、APIがpayloadを返す場合、それは非常に多くの場合JSONです。

JSONとは

JSONは2つの構造を使ってデータを表現します: 中括弧で囲まれたキーと値のペアの順序なし集合であるオブジェクトと、角括弧で囲まれた順序付きリストである配列です。値はstring、数値、boolean、null、オブジェクト、または配列にできます。キーは常に二重引用符で囲まれたstringです。この極小の文法だけで、ほぼあらゆるデータをモデル化できます。

人がつまずくルール

JSONはいくつかの点で厳格です: キーとstring値は二重引用符を使わなければならず(単一引用符は決して使えない)、末尾のカンマはなく、コメントもありません。これらの制約によりJSONは機械にとって解析しやすくなりますが、手作業で編集したJSONファイルは、引用符の欠落やはぐれたカンマによって、予想以上に頻繁に壊れることを意味します。

JSON対YAML

YAMLはJSONの厳格なsupersetなので、有効なJSONはすべて有効なYAMLです。JSONはより冗長で機械指向ですが、YAMLは人間が設定を手書きするのにより親しみやすいです。多くのツールはどちらも受け付けます: データはネットワーク越しにJSONとしてやり取りされることが多いですが、ディスク上ではYAMLで設定されます。

CIパイプラインにおけるJSON

CIのworkflowは絶えずJSONに依存しています。GitHub ActionsのmatrixはJSON文字列から構築でき、GitHubのイベントpayloadはJSONであり、ほとんどのCLIは結果をjqにパイプできるようJSON出力モードを提供します。package-lock.jsonのようなlockfileはJSONであり、多くのツールはpackage.jsonのフィールドに設定を保存します。

Driving a matrix with JSON
# Build a matrix from a JSON array in GitHub Actions
jobs:
  test:
    strategy:
      matrix:
        node: ${{ fromJSON('["18","20","22"]') }}
    runs-on: ubuntu-latest
    steps:
      - run: node --version

Latchkeyについての注記

Latchkeyのrunnerは標準のGitHub Actions runnerなので、JSON駆動のmatrix、fromJSON式、CLI出力のjqによる解析はすべて、GitHub-hostedのrunnerとまったく同じように動作します - 特別に設定するものは何もありません。

重要なポイント

  • JSONはオブジェクト(キーと値のペア)と配列(順序付きリスト)から構築されるテキストフォーマットです。
  • 厳格です: キーは二重引用符で囲み、末尾のカンマなし、コメントなし。
  • CIはJSONをあらゆる場所で使います - イベントpayload、matrixの定義、lockfile、機械可読なCLI出力。

関連ガイド