JSONフラグメントがあります。
以下は機能しません:
VALUE=<<PERSON
{
"type": "account",
"customer_id": "1234",
"customer_email": "[email protected]"
}
PERSON
echo -n "$VALUE" | python -m json.tool
結果:
JSONオブジェクトをデコードできません。
jq
つまり、同じことを行います。
echo -n "$VALUE" | jq '.'
出力がありません。
以下は同じ動作をします。
VALUE=<<PERSON
'{
"type": "account",
"customer_id": "1234",
"customer_email": "[email protected]"
}'
PERSON
echo -n "$VALUE" | python -m json.tool
返信:
JSONオブジェクトをデコードできません。
しかし、以下はうまくいきます。
VALUE='{
"type": "account",
"customer_id": "1234",
"customer_email": "[email protected]"
}'
echo -n "$VALUE" | jq '.'
echo -n "$VALUE" | python -m json.tool
ベストアンサー1
VALUE=<<PERSON
some data
PERSON
echo "$VALUE"
出力がありません。
ここにある文書は次のとおりです。リダイレクト、変数にリダイレクトできません。
コマンドラインを解析すると、リダイレクトは変数の割り当てとは別のステップとして扱われます。したがって、あなたの命令は(スペースに注意してください)
VALUE= <<PERSON
some data
PERSON
つまり、空の文字列を変数に割り当ててから、その文字列の標準入力をコマンドにリダイレクトします(ただし、コマンドがないため何も起こりません)。
気づく
<<PERSON
some data
PERSON
そのまま有効です
<somefile
データを含むように標準入力ストリームを設定できるコマンドがないため、失われます。
しかしこれはうまくいきます:
VALUE=$(cat <<PERSON
some data
PERSON
)
ここで文書を受け取り、cat
標準出力にコピーする命令は次のとおりです。これはコマンド置換によって変数に割り当てられます。
あなたの場合は、次のものを使用できます
python -m json.tool <<END_JSON
JSON data here
END_JSON
変数にデータを格納する追加の手順を実行する必要はありません。
このようなツールを見ることも価値があるかもしれません。jo
正しいエンコーディングでJSONデータを生成します。
たとえば、
jo type=account customer_id=1234 [email protected] random_data="some^Wdata"
...出力される^W
リテラル文字はどこにありますか?Ctrl+W
{"type":"account","customer_id":1234,"customer_email":"[email protected]","random_data":"some\u0017data"}
したがって、質問のコマンドは次のように書くことができます。
jo type=account customer_id=1234 [email protected] |
python -m json.tool