📋
rfコマンドの実例: JSONをYAMLにYAMLをJSONに変換する
実例: JSONをYAMLにYAMLをJSONに変換する
JSONからYAML、逆にYAMLからJSONへ変換をしてみます。rfコマンドでは、任意のフォーマッタを選択できるため、出力する際にto_json,to_yamlを呼び出すことでフォーマットを変換することができます。
JSONからYAMLに変換する
以下のJSONファイルを変換してみます。
example-1.json
[
{
"id": 1,
"name": "りんご",
"price": {
"regular": 150,
"sale": 120
},
"details": {
"category": "果物",
"origin": "青森県",
"nutritions": {
"calories": 54,
"vitamin_c": 4.0
}
}
}
]
YAMLへの変換を行います。-s(--slurp)オプションを使用します。このオプションを使用しないと、レコードごとのYAMLが出力されてしまい元のJSONとは別物になってしまいます。
> rf j -s to_yaml example-1.json
- id: 1
name: りんご
price:
regular: 150
sale: 120
details:
category: 果物
origin: 青森県
nutritions:
calories: 54
vitamin_c: 4.0
YAMLからJSONに変換する
同様に以下のYAMLファイルをJSONに変換します。
example-1.yaml
- id: 1
name: りんご
price:
regular: 150
sale: 120
details:
category: 果物
origin: 青森県
nutritions:
calories: 54
vitamin_c: 4.0
rfコマンドを使ってJSONを変換します。
> rf y -s to_json example-1.yaml
[
{
"id": 1,
"name": "りんご",
"price": {
"regular": 150,
"sale": 120
},
"details": {
"category": "果物",
"origin": "青森県",
"nutritions": {
"calories": 54,
"vitamin_c": 4.0
}
}
}
]
Arrayではない場合-s(--slurp)をつけない
rf v1.32.2現在、入力されるJSON/YAMLがArrayではない場合に、-s(--slurp)オプションをつけると余分にArrayで括られてしまうというバグがあります。これを回避するためには、意図的に-s(--slurp)を外す必要があります。
example-2.json
{
"store": "フルーツマート",
"location": "東京都"
}
example-2.jsonを変換してみましょう。ここでは結果をわかりやすくするため、一旦YAMLに変換したあとに、JSONに戻してみます。
# YAML出力してみる
> rf j -s to_yaml example-2.json
- store: フルーツマート
location: 東京都
# わかりやすさのため再度JSONに戻して比較
> rf j -s to_yaml example-2.json | rf y -s to_json
[
{
"store": "フルーツマート",
"location": "東京都"
}
]
Arrayの配下にObjectがあり、example-2.jsonとは別物になってしまいました。これを回避するためには-s(--skurp)をはずす必要があります
> rf j to_yaml example-2.json
store: フルーツマート
location: 東京都
rf j to_yaml example-2.json | rf y to_json
{
"store": "フルーツマート",
"location": "東京都"
}
この問題は今後のrfコマンドのアップデートで修正する予定です。
Discussion