JavaScript Object Notation(JSON)は、人間にもプログラムにも読みやすい形式で構造的にデータを記述するためのフォーマットである[1]。
MinecraftではJSONフォーマットは、装飾や特殊機能が利用できるテキストであるJSONテキストや、リソースパック・データパック・アドオン内の設定ファイル、および一部のセーブデータの保存などに使用されている。
記法
JSONはテキストベースのフォーマットであるから、一般的なテキストエディタで作成して拡張子を.json
として保存することで容易に作成できる。ただしpack.mcmeta
など、JSONフォーマットで記述するにも関わらず拡張子が.json
でない場合も存在する。
JSONファイルは改行・インデントの有無にかかわらず機能するが、ここでは可読性の為適宜改行とインデントを施す。ただし、ゲーム上の一部の入力画面(コマンドブロックなど)においては改行を施すことができない。
値の種類
JSONフォーマットには「論理値」「数値」「文字列」「配列」「オブジェクト」「null値」の6種類の値の種類が存在し、JSONはこれらを組み合わせて記述する。
論理値
論理値(bool、boolean)は真偽を表す値である。
true
(真)またはfalse
(偽)のどちらかで表記する。文字列ではないため、引用符で囲んではならない。
true
false
数値
数値(number)は必ず10進数で記述する必要がある。整数、整数、小数、負の数、およびe
を用いた指数省略形が使用できる。負の数には-
を付すが、正の数に+
を付けることはできない。
2
-0.5
3e-6
(=3×10-6)
文字列
文字列(string)は、二重引用符("
)で囲んで表記する。NBTと違い、一重引用符('
)は文字列の宣言に使用できない。
引用符の中には二重引用符("
)とバックスラッシュ\
以外の文字(ひらがな、漢字等含む)を使用できる。また文字列内では、直接記載できない記号や制御文字を以下の表記で指定することができる。ただし改行など、一部の環境では正しく機能しない文字もある。
表記 | 意味 |
---|---|
\" | 二重引用符 |
\\ | バックスラッシュ |
\/ | スラッシュ |
\b | バックスペース |
\f | 改ページ |
\n | 改行 |
\r | 復帰 |
\t | タブ |
\uXXXX | Unicode文字の代記。XXXXには16進数表記の文字コードが入る。第0面以外の文字はサロゲート文字を前に付して表現する。 |
"hoge"
"Hello, world"
"文字列中の引用符は「\"」のように記述する"
※文字コードの都合上、環境によってはバックスラッシュ(\)が円記号(¥)のように表示される場合がある。なお、Minecraft上のデフォルトのフォントでは正しく\と表示される。
オブジェクト
オブジェクト(object)では、波括弧({}
)で囲った中にキー(値の名前)と値のペアを記述することができる。
キーと値の間はコロンで区切り、複数のキー・値のペアを並列する場合はそれぞれの間をカンマで区切る。ただし、最後のキー・値のペアの後ろにはカンマがあってはならない。またキーは文字列なので、必ず二重引用符("
)で囲む必要がある。
一つのオブジェクト内に同じ名前のキーがあってはならない。なお、値としてさらに別のオブジェクトやリストを入れ子的に設定することも可能である。
{
"Bob": {
"ID": 1234,
"lastName": "Ramsay"
},
"Alice": {
"ID": 2345,
"lastName": "Berg"
}
}
配列
配列、またはリスト(array, list)は角括弧[]
で囲った中に任意の値(種類を問わない)を並列することができる。
各データの間はカンマで区切るが、最後の値の後ろにカンマがあってはならない。
["Bob", "Alice", "Carlos", "Eve"]
凡例
このWikiでは、ファイルのJSON構造を下のようなツリーで表記する。
- ツリー表記
-
- <値の名前>: 値の説明
- <リストの名前>: リストの説明
- : リストの各要素の説明
- <オブジェクトの名前>: オブジェクトの説明
- <値の名前>: 値の説明
- 対応するJSON構造
{
"<論理値の名前>": <論理値>,
"<リストの名前>": [
"<文字列>",
"<文字列>",
"<文字列>"
],
"<オブジェクトの名前>":{
"<数値の名前>": <数値>
}
}
各値のアイコンは値の種類を示しており、がオブジェクト、が配列、が論理値、が文字列、が数値である。JSONの数値の種類は1種類のみであるので基本的には倍精度浮動小数点数として表記しているが、NBTに変換される可能性のある値などではその型を明示するために8ビット整数、16ビット整数、32ビット整数、64ビット整数、単精度浮動小数点数が使用されていることももある。
オブジェクト内に記述する値の場合はその値の名前が、アイコンの後ろに太字で記載されている(例: pack_format)。値の名前が任意に設定できる場合は、 <Mobの名前空間ID>のように括弧つきで表記する場合がある。
値の後ろにはコロンを挟んで、その値が満たすべき形式、何を指定するのかという情報など、値の用途など、その値に関する情報が記載される。
NBT上での記法
JSONをNBT上に記述する際には、JSON全体を二重引用符または一重引用符で囲み単一の文字列として認識させなければならない。JSON内にさらに引用符が含まれる場合は、\"
のように引用符をエスケープする必要がある。これはJSONとNBTが一見類似しているが全く異なるデータフォーマットであることに起因するものであり、NBTの中にJSONをそのまま記載することはできない。
逆も然りで、JSON内ではNBTは常に文字列として記述する。
用途
現在、JSONはMinecraftの以下のデータの保存・記述に用いられている。
- 記入済みの本、看板、プレイヤーが金床や名札で設定したアイテムやエンティティの名前、およびコマンド
/tellraw
、/title
、/bossbar
、/scoreboard
、/team
で表示されるテキスト、および翻訳される文字列[Java Edition限定] - Java Editionにおける個々のデータパックやリソースパックを説明する
pack.mcmeta
ファイル - Bedrock Editionにおける個々のアドオンを説明する
manifest.json
ファイル - リソースパック内でモデルやサウンドイベント、UIなどを定義するのに使用されるファイル
- ビヘイビアパック内でエンティティの振る舞い、ブロックの振る舞い、アイテムの振る舞いなどを定義するのに使用されるファイル[Bedrock Edition限定]
/give
および/replaceitem
で使用できるアイテムコンポーネントの記述[Bedrock Edition限定]- 進捗や統計(場所:
.minecraft/saves/*/data/stats/*.json
) - Minecraftランチャー上のプロファイルデータ(場所:
.minecraft/launcher_profiles.json
) - ダウンロードされた各バージョンに関する情報(場所:
.minecraft/versions/*/*.json
) - データパック内で進捗、ルートテーブル、タグ、レシピ、ディメンション、プレディケートを定義するのに使用されるファイル[Java Edition限定]