JSONを文字列に変換したいユースケース
JSONを文字列に変換したい場合がある。
ユースケースを一つ挙げるとREST APIでデータをJSONで送るときに、JSONのkey-valueのvalue自体にJSONを設定したいが、valueは文字列しか受け付けない場合。
もう少し具体的な例として話すと、JSONで暗号化したい文字列を渡すと暗号化してくれるAPIを考える。
{
"encryptData": "何らかの文字列"
}
シンプルな文字列であればいいが、DBの接続URLとユーザー名とパスワードをまとめて暗号化したく、データ形式としてJSONを採用した場合を考える。
{ "url": "略", "user": "略", "password": "略" }
を以下のように直接valueにセットしたいところだが、文字列しかvalueにはセットできないのでダブルクォーテーションで囲って文字列にする必要がある。
{
"encryptData": { "url": "略", "user": "略", "password": "略" }
}
しかし、JSON自体にダブルクォーテーションが使われているため、ダブルクォーテーションをエスケープしなければならない。
{
"encryptData": "{\"url\":\"略\",\"user\":\"略\",\"password\":\"略\"}"
}
このようなときにエスケープ処理を施した上で文字列に変換してくれる機能がjqに存在する。
jqの@text
実際に使ってみる。
$ echo '{ "key": "value" }' | jq .
{
"key": "value"
}
$ echo '{ "key": "value" }' | jq @text
"{\"key\":\"value\"}"