◆JSONを簡単に書くツールをつくった

JSONってXMLに比べ簡単に書けますし便利ですよね

ですが 

まだ書くのが面倒なんです
{}とか[]とか
文字列に""つけるのすら面倒です

ということで楽にJSONを書くためのツールを作ってみました

json_maker

書き方

JSONとは違い改行とインデントに意味があります
yamlっぽい書き方で書きます
1行に1データが基本になります
インデントは見た目ではなく「数」を見るのでタブと半角スペースが混ざっているとわかりづらくなります
タブも半角スペースも同じ1文字扱いです

1つだけのデータ

1行だけならそのままの値になります
末尾の改行に注意してください
改行があると空行が最後に存在する扱いになります
true
true

文字列は「"」なしでかけます
勝手に追加してくれます
ただし エスケープはしないので自分で\"など書いておかないとダメです
aaa
"aaa"
""の追加がないのは数字とtrueとfalseとnullです

配列

同じインデントで複数行が続くと配列です
1 2 3
[1,2,3]

階層構造はインデントで表します
1  11  12  13 2  21  22 3 4  41   411    4111   412 5
[1,[11,12,13],2,[21,22],3,4,[41,[411,[4111],412]],5]

11,12は同じ配列で21は別の配列に入れたいのに
1  11  12  21
[1,[11,12,21]]
になってしまいます
そういうときは空行を入れます
1  11  12  21
[1,[11,12],[21]]
できました!

空行にもインデントがあるなしに意味があります
上の例で12の次の空行に12と同じレベルのインデントがあるとこうなります
1  11  12    21
[1,[11,12,"",21]]
空文字になってしまいます

オブジェクト

オブジェクトは「:」で書きます
a:1 b:2 c:3
{"a":1,"b":2,"c":3}

階層構造にしたいときは「:」の右側がない状態にして次の行のインデントを追加します
a:1 b:  c:1
{"a":1,"b":{"c":1}}

「:」の右側に何も書かないときに空文字列扱いにはならないです
a:1 b: c:2
// ERROR! {"a":1,"b":,"c":2}

インデントを戻すと階層も戻ります
aa:1 ab:  ba:12  bb:23 ac:3
{"aa":1,"ab":{"ba":12,"bb":23},"ac":3}

配列とオブジェクトが混ざってるとき

オブジェクトの中の配列はほぼそのまま
インデントがあれば要素1つでも配列またはオブジェクトになります
valueがただの値ならa:1のようにインデントなしにしないといけません
a:1 b:  x  y c:  z d:0
{"a":1,"b":["x","y"],"c":["z"],"d":0}

配列内のオブジェクトはキーも1レベルインデントを追加
1  a:1  b:   2
[1,{"a":1,"b":[2]}]

これだとダメです
1 a:1
// ERROR! [1,"a":1]

「:」を書きたいとき

配列の中では記号は普通に文字列扱いです
1 2 a b , . ; :
[1,2,"a","b",",",".",";",":"]

オブジェクトでは「[:]」と書くことで「:」を表します
最初に「:」が見つかってからはそのまま出力されるのでkey側では「[:]」とかく必要がありますが value側ではそのまま「:」と書きます
a:1 a[:]b:c a[[:]][:]:c abc:::1 abcd:[:]
{"a":1,"a:b":"c","a[:]:":"c","abc":"::1","abcd":"[:]"}

使い方

ページの左側に入力して右下の「convert」を押すかCtrl+Enterを入力すれば変換してくれます
変換ツール自体はエラーを出さないです(JavaScriptらしく)
ですが 出てきたJSONにエラーがあることがあるので その場合は「エラーがあります」と表示するようにしています