あらすじ
yaml内で以下のような処理をしたい(イメージ)
RES = $(curl -X POST -d [なんかjsonデータ] [以下、URLなどの処理に必要なあれこれ])
# 以降でRESの値を使った処理をつらつらと
渡したいjsonデータはこんな感じ。
{
"親階層": {
"子階層1": "データ1",
"子階層2": "データ2"
}
}
このとき、方法としては3パターン検討していた。
その内1つがちょっと躓いたので備忘録代わりのメモとして残す。
①jsonファイルにして渡す
適当なjsonファイル(data.jsonとか)を作成し、中身を記載。
中身はあらすじのjsonデータをそのまま使用します。
できたら以下のような形でcurlに渡す。
RES = ${curl -X POST -d @test.json [以下、URLなどの処理に必要なあれこれ])
# 以降でRESの値を使った処理をつらつらと
すんなり通った。
②直に渡す
データを以下のようにエスケープ。
'{"親階層": {\"子階層1\": \"データ1\",\"子階層2\": \"データ2\"}}'
こいつをそのままdオプションに当てはめる。
RES = ${curl -X POST -d '{"親階層": {\"子階層1\": \"データ1\",\"子階層2\": \"データ2\"}}' [以下、URLなどの処理に必要なあれこれ])
# 以降でRESの値を使った処理をつらつらと
ちょっと苦戦したものの通った。
③変数に格納して渡す
こいつが一番問題児だった。
以下のように変数を作成。
DATA: '{"親階層": {\"子階層1\": \"データ1\",\"子階層2\": \"データ2\"}}'
こいつをdオプションに当てはめるのだか、そのまま($DATA)指定しても構文でエラーになってしまう。
エスケープを色々試した結果、正解はこんな感じ。
RES = ${curl -X POST -d "$DATA" [以下、URLなどの処理に必要なあれこれ])
# 以降でRESの値を使った処理をつらつらと
変数をダブルクォーテーションで囲むことでした。
わからんて...........................
以上。