JSONを楽に生成できるツールを移植してみた

こんにちわ

ゴリラです

先日Twitter上でmattnさんのツイートを見て、

joってツールを知りました。

image.png

2019/02/25

本家のREADMEにgjoが追加されました。

https://github.com/jpmens/jo/blob/master/README.md#see-also

2019/02/26

Windowsでgjo -p status=$(gjo name=gorilla) というふうにしたい場合はshellwrapを使ってください。

詳細はこちらをどうぞ。


joとは

普段curlを使って何かデータをPOSTする時って"をエスケープしないといけないのですよね。

curl -X POST -H "Content-type: application/json" https://localhost/gorilla -d "{\"name\":\"gorilla\",\"age\":26}"

エスケープ面倒だし見づらいから、もっと書きやすくしようってのがjoっていうツールコンセプトになります。

使い方は簡単で、key=valueって引数に渡すだけでjson形式に変換して標準出力してくれます。

$ jo -p name=gorilla age=26

{
"name": "gorilla",
"age": 26
}

これをcurlと組み合わせるとこうなります。

curl -X POST -H "Content-type: application/json" https://localhost/gorilla -d $(jo name=gorilla age=26)

だいぶ楽になりましたね。


移植の話

ここからが本題ですが、仕組みはシンプルだったのでGoの勉強のため移植しました。

こちらのツールの使い方も本家とほぼ同じです。

# -pでjsonを整形した状態で標準出力します

# -aで配列を生成することができます(配列の場合はキー不要になります)
$ gjo -p status=(gjo name=gorilla age=26 lang=(gjo -a Go Java PHP))
{
"status": {
"age": 26,
"lang": [
"Go",
"Java",
"PHP"
],
"name": "gorilla"
}
}
# -vでバージョン情報を標準出力します
$ gjo -v -p
{
"program": "gjo",
"description": "This is inspired by jpmens/jo",
"author": "gorilla0513",
"repo": "https://github.com/skanehira/gjo",
"version": "1.0.2"
}
# -hでヘルプを標準出力します
$ gjo -h
Usage of gjo:
-a creates an array of words
-p pretty-prints
-v show version

とこんな感じで、本家ほどではないのですが、

最低限のことはできるようになっています。

興味ある方は触ってみてください。

Windowsでも動くと思いますが(動作未確認)動かなかったらPRください。


おまけ

gjoを作って公開したらmattnさんからPRをいただきました。

Small fixesと書いて有りながら、雑に書いてソースを超きれいに直していただいたので、感謝してます。

image.png


移植やってみて思ったこと

移植は難しいけど、やっぱり結構勉強になるなぁと思いました。

移植した分だけ、勉強になるんで今後もいろいろ移植してみます。