joとdictknifeのmkdictを比べてみる
jo
joの例を翻訳してみる
joのページにある例を翻訳してみる。
簡単な例。
$ jo name=Jane {"name":"Jane"} $ dictknife mkdict name Jane { "name": "Jane" }
コマンドを使った例
$ jo time=$(date +%s) dir=$HOME {"time":1553782875,"dir":"/home/nao"} $ dictknife mkdict time $(date +%s) dir $HOME { "time": 1553782897, "dir": "/home/nao" }
ネストしたもの。
$ jo person=$(jo name=foo age=20) {"person":{"name":"foo","age":20}} $ dictknife mkdict person/name foo person/age 20 { "person": { "name": "foo", "age": 20 } }
配列的なもの。意外と文字列のリストが鬼門だった。jsonpointer的なものを想定しているので""と"/"は別物。区切り文字(delimiter)を越えると配列になる。
$ jo -p -a spring summer winter [ "spring", "summer", "winter" ] $ dictknife mkdict "" spring ";" "" summer ";" "" winter [ "spring", "summer", "winter" ]
あるいはヒアドキュメントで
$ dictknife mkdict << EOS "" spring "" summer "" winter EOS [ "spring", "summer", "winter" ]
ネストしたもの。
$ jo -p name=JP object=$(jo fruit=Orange point=$(jo x=10 y=20) number=17) sunday=false { "name": "JP", "object": { "fruit": "Orange", "point": { "x": 10, "y": 20 }, "number": 17 }, "sunday": false } $ dictknife mkdict name JP object/fruit Orange object/point/x 10 object/point/y 20 object/number 17 sunday false { "name": "JP", "object": { "fruit": "Orange", "point": { "x": 10, "y": 20 }, "number": 17 }, "sunday": false }
もう1つの複雑な例。"/"で終わるものは配列の要素になる(append)。
$ jo -p number=17 pass=true geo[lon]=88 geo[cc]=ES point[]=1 point[]=2 geo[lat]=123.45 { "number": 17, "pass": true, "geo": { "lon": 88, "cc": "ES", "lat": 123.45 }, "point": [ 1, 2 ] } $ dictknife mkdict number 17 pass true ge/lon 88 geo/cc ES geo/lat 123.45 point/ 1 point/ 2 { "number": 17, "pass": true, "ge": { "lon": 88 }, "geo": { "cc": "ES", "lat": 123.45 }, "point": [ 1, 2 ] }
変数と参照
そういえば変数と参照を持っている。
$ dictknife mkdict @ob/name "foo" @ob/age 20 id 1 "" "&ob" ";" id 2 "" "&ob" [ { "id": 1, "name": "foo", "age": 20 }, { "id": 2, "name": "foo", "age": 20 } ]
joと違って再帰的には作れないかも。