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と違って再帰的には作れないかも。