make s curl呼び出しを使用してbashスクリプトを作成し、jsonドキュメントを取得しようとしています。 jsonドキュメントには名前付きキーがaccess_token
あり、そのフィールドの値を抽出する必要があります。これは私のJSONドキュメントです
echo $json
{"access_token":"kjdshfsd", "key2":"value"}
私はそれをインストールしていませんjq
。
答え1
短い答え:インストールjq
jsonパーサーなしでjsonを解析しないでください。
これを行うには、次のようにしますjq
。
echo "$json" | jq -r '.access_token'
またはecho
、タブと改行エンコードが拡張されないようにするには、
jq -r -n --argjson data "$json" '$data.access_token'
私が好むJSONパーサーは次のとおりです。JSON、これを使用するには、次のことができます。
echo "$json" | json access_token
メモ:どちらのソリューションも、jsonオブジェクトが例に示されているものとまったく同じ(または少なくともほぼ同じ)であると仮定します。
答え2
いいえjq
、、awk
:sed
#!/bin/bash
json='{"access_token":"kjdshfsd", "key2":"value"}'
echo $json | grep -o '"access_token":"[^"]*' | grep -o '[^"]*$'
ここでテストして作業しています。 https://ideone.com/Fw4How
答え3
jsonパーサーをインストールできない場合、文字列に二重引用符または改行文字を含めることができないと仮定すると、各レコードは1行にあり、各ラベルと値は公開されているように二重引用符で囲まれた文字列です。サンプル入力に示すように、このawkを使用するすべてのUNIXシステム上のすべてのシェルで機能します。
$ cat tst.awk
{
while ( match($0,/"[^"]*"/) ) {
hit = substr($0,RSTART+1,RLENGTH-2)
if ( ++cnt % 2 ) {
tag = hit
}
else {
val = hit
f[tag] = val
}
$0 = substr($0,RSTART+RLENGTH)
}
print f[tgt]
}
$ echo "$json" | awk -v tgt='access_token' -f tst.awk
kjdshfsd
$ echo "$json" | awk -v tgt='key2' -f tst.awk
value
答え4
あるいはjq
、最新バージョンの miller( mlr
) は、表の行のようにスカラー値のみを含む JSON オブジェクトの場合と同様に、表形式データを表す限り JSON 入力をサポートします。
printf %s "$json" | mlr --j2n cut -f access_token
mlr
値を再フォーマットしないという利点(またはPoVによる欠点)があります。好き1e1
か10.00000000000000001
そうではありません10
。