JSONとマイクラ式JSONについて

注意:
この記事はマイクラ初心者のためのJSON講座です。
真面目にJSONを学ぶならば、参考にしないように。
また、かなりざっくりした内容です。
しっかり勉強したい方はUターンをおすすめします。

JSONってなに?

JSONは人間が読みやすくて、機械にとっても読みやすい形式のこと。 ファイルの拡張子に.jsonと書けば、それはもうJSON(言い過ぎ)。

例えばどういうもの?

こういう書き方をするのがJSON

{
    "text": "てすと",
    "color": "red",
    "bold": true,
    "clickEvent": {
        "action": "run_command",
        "value": "/say test"
    }
}

なんか書き方がいっぱいあって難しいと思われるかも知れないけど、次のやつを覚えてればOK。

種類 説明
オブジェクト { "text": "てすと" } {}でくくって、:でつなげたやつ。
かならず"文字":値の形で書かれる。右側は自由。
リスト [ 0, 1, 2, 3 ] []でくくって、いっぱい並べるやつ。
中身は自由だけども、全部同じ種類じゃないとダメ。
文字 "てすと" ""でくくっただけ。その中は文字として扱う。
数字 100 数字です。マイナスの値も小数点もOKです。
YES か NO か true YESがtrue、NOがfalseって覚えてれば大丈夫。

たったこれだけしか無いので、ルールはシンプルだね。 さっきのJSONで説明するとこんな感じ。

// {} があるってことはオブジェクト。オブジェクトの中は「"文字":値」の組み合わせをいくつでも並べられる
{
    "text": "てすと", // "文字":"文字"
    "color": "red",
    "bold": true, // "文字": YES
    "clickEvent": { // "文字": {オブジェクト}
        "action": "run_command", // "文字":"文字"
        "value": "/say test"
    }
}

イクラJSONとは?

イクラにはNBTとかstorageとかでJSONっぽい形式の書き方ができる。 例えばこういうの。

/give @p stone{display:{Name:'{"text":"石だよ"}'}}

え!?見た目ちがうじゃん!って思うよね。 でも、こういうふうに書いても、コマンドは通るんだよね。

/give @p stone{"display":{"Name":'{"text":"石だよ"}'}}

ちょっとJSONに近づいたね。 でも''でくくっているのが意味わからないね。じゃあ、こうしよう。

/give @p stone{"display":{"Name":"{\"text\":\"石だよ\"}"}}

なんか変なのが増えたけど、JSONっぽくなったね。 しかも、コマンドが通るね。 なんでだ???

普通のJSONとマイクラJSONの違いは?

ここでちょっと、さっきのコマンドを整理してみよう。

{
    "display": {
        "Name": "{\"text\":\"石だよ\"}"
    }
}

おや?さっきよりもJSONっぽくなった。 コメントを入れてみよう。

// {} ってことはオブジェクトだ
{
    "display": { // "文字":{オブジェクト} だね
        "Name": "{\"text\":\"石だよ\"}" // "文字":"文字"
    }
}

イクラJSONJSONもちゃんと理解できるみたい。 さて、\"って何?って思い始めたことでしょう。

文字の中で"を使いたい

JSONで文字は""でくくると文字だって書きました。じゃあ、"は文字として使えないのは、不便です。ならば使えるようにしてしまおう。

そうです。\"の前に使ってあげることで、文字として認識させてあげてるわけですね。

イクラJSONの特徴

イクラJSONの文字

さて、マイクラJSONに話を戻しましょう。 さっきのJSONを1段階戻しますよ。

{
    "display": {
        "Name": '{"text":"石だよ"}'
    }
}

\""になりました! これで2つわかったことがあります。

  • イクラ式は''でくくっても文字として扱う
  • ''でくくった文字の中では、"が普通に使えるようになる

さらにもう1段階戻しましょう。

{
    display: {
        Name: `{"text":"石だよ"}`
    }
}

""でくくらなくても文字として認識されてます。 そうです。マイクラ式はどんどん省略しちゃおうぜって形なのです。

もちろん、普通のJSONではJSONとして扱っちゃくれません。

イクラJSONの数字の後の文字(b, s, L, f, d)

ここまでマイクラJSONの文字の話ばっかりしてましたけど、数字の後になんか文字がついていることってありますよね?例えばこういうの。

{
  playerGameType: 1,
  isGuiOpen: 0b,
  DeathTime: 0s,
  Health: 10.333332f,
  Pos: [-107.348d, 4.0d, 54.76943597999223d],
  UUIDMost: 486310096284565318L,
}

この数字は何かというと、数字の「種類」を表しているんですね。

種類 説明
b isGuiOpen: 0b -128から127までの整数
s DeathTime: 0s -32,768から32,767までの整数
何もなし playerGameType: 1 ものすごい範囲の整数
L UUIDMost: 486310096284565318L 何もなし のさらにものすごい範囲の整数
f Health: 10.333332f ものすごい範囲の小数点
d Pos: [-107.348d, 4.0d, 54.76943597999223d] f のさらにもっと広い範囲の小数点

ものすごい範囲とざっくりしてるのは、書いたけど誰も気にしないかってことで、簡略化した。

基本的にはゲーム側で勝手に推測して付けてくれるので、頭の片隅にでも入れておけば良いと思う。

ちなみにtruefalse1b0bで表されるよ。 上のisGuiOpenはfalse(GUIを開いていない)って意味。

ファイルとコマンド

イクラ.jsonというファイルを書くときがありますが、そのときは普通のJSONで書く必要があります。

ただし、コマンド内に出てくるJSON普通のJSONイクラJSONの両方が書けちゃうのです。

これが、ややこしくしてマイクラJSONが苦手な理由かもしれません。

(まあ、一番の理由はコマンドだと改行とかできないから読みにくいせいなのがあるんだけども…)