LoginSignup
0
0

yaml内でエスケープに苦戦した話

Last updated at Posted at 2023-07-24

あらすじ

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の値を使った処理をつらつらと

変数をダブルクォーテーションで囲むことでした。
わからんて...........................

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0