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\":\"石だよ\"}" // "文字":"文字" } }
マイクラ式JSONはJSONもちゃんと理解できるみたい。
さて、\"
って何?って思い始めたことでしょう。
文字の中で"
を使いたい
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 のさらにもっと広い範囲の小数点 |
ものすごい範囲とざっくりしてるのは、書いたけど誰も気にしないかってことで、簡略化した。
基本的にはゲーム側で勝手に推測して付けてくれるので、頭の片隅にでも入れておけば良いと思う。
ちなみにtrue
とfalse
は1b
と0b
で表されるよ。
上のisGuiOpenはfalse
(GUIを開いていない)って意味。
ファイルとコマンド
マイクラは.json
というファイルを書くときがありますが、そのときは普通のJSONで書く必要があります。
ただし、コマンド内に出てくるJSONは普通のJSONとマイクラ式JSONの両方が書けちゃうのです。
これが、ややこしくしてマイクラのJSONが苦手な理由かもしれません。
(まあ、一番の理由はコマンドだと改行とかできないから読みにくいせいなのがあるんだけども…)