[...]アポストロフィが含まれている場合、JSONは無効です。
https://www.json.orgによるとではありません。JSON文字列では一重引用符を使用できます。
bashで必要な文字をエスケープするにはどうすればよいですか?
xidelを使用して、POSTするJSONを適切に準備できます。テストできないので、例として使用します
(この回答を参照)。https://example.com
https://api.github.com/markdown
'çömmít' "mêssågè"
のエキゾチックな出力として仮定しましょうgit log -n 1 --pretty=format:'%s'
。
"text"
-attributeの値を適切にエスケープして(シリアル化された)JSONオブジェクトを作成します。
$ git log -n 1 --pretty=format:'%s' | \
xidel -se 'serialize({"text":$raw},{"method":"json","encoding":"us-ascii"})'
{"text":"'\u00E7\u00F6mm\u00EDt' \"m\u00EAss\u00E5g\u00E8\""}
カール(可変)
$ eval "$(
git log -n 1 --pretty=format:'%s' | \
xidel -se 'msg:=serialize({"text":$raw},{"method":"json","encoding":"us-ascii"})' --output-format=bash
)"
$ echo $msg
{"text":"'\u00E7\u00F6mm\u00EDt' \"m\u00EAss\u00E5g\u00E8\""}
$ curl -d "$msg" https://api.github.com/markdown
<p>'çömmít' "mêssågè"</p>
カール(パイプ)
$ git log -n 1 --pretty=format:'%s' | \
xidel -se 'serialize({"text":$raw},{"method":"json","encoding":"us-ascii"})' | \
curl -d@- https://api.github.com/markdown
<p>'çömmít' "mêssågè"</p>
実際、curl
すでにを使用している場合は必要ありませんxidel
。
Xidel(パイプ)
$ git log -n 1 --pretty=format:'%s' | \
xidel -s \
-d '{serialize({"text":read()},{"method":"json","encoding":"us-ascii"})}' \
"https://api.github.com/markdown" \
-e '$raw'
<p>'çömmít' "mêssågè"</p>
Xidel(パイプ、クエリ内)
$ git log -n 1 --pretty=format:'%s' | \
xidel -se '
x:request({
"post":serialize(
{"text":$raw},
{"method":"json","encoding":"us-ascii"}
),
"url":"https://api.github.com/markdown"
})/raw
'
<p>'çömmít' "mêssågè"</p>
Xidel(すべてクエリ内)
$ xidel -se '
x:request({
"post":serialize(
{"text":system("git log -n 1 --pretty=format:'\''%s'\''")},
{"method":"json","encoding":"us-ascii"}
),
"url":"https://api.github.com/markdown"
})/raw
'
<p>'çömmít' "mêssågè"</p>