jqコマンドのUnixシェル参照の問題エラー

jqコマンドのUnixシェル参照の問題エラー

jq -n --arg KEY 'no leading zero' --arg VAL '.13452' '.+={$KEY:$VAL}'出力を生成するためにbash端末でこのコマンドを試しています{"no leading zero":".13452"}

ただし、次のエラーが発生します。

jq: error: syntax error, unexpected ':', expecting '}' (Unix shell quoting issues?) at <top-level>, line 1:
.+={$KEY:$VAL}        
jq: error: May need parentheses around object key expression at <top-level>, line 1:
.+={$KEY:$VAL}    
jq: 2 compile errors

{"no leading zero":".13452"}パラメータを使用して出力を取得するようにコマンドを変更するにはどうすればよいですか?

ありがとうございます。

答え1

あなたはそれを使用することができます文字列補間:

jq -n --arg KEY 'no leading zero' --arg VAL '.13452' '{"\($KEY)":$VAL}'

生産する

{
  "no leading zero": ".13452"
}

答え2

jq最も一般的な方法は、3つの方法の1つで、オブジェクトにキーとその値を追加することです。

  1. ()のように、既存のオブジェクトにキーと値を持つオブジェクトを「追加」し. += { key: value }たり、
  2. キーを生成し、既存のオブジェクト(.key = value)に直接値を割り当てるか、
  3. 変数を使用するときに賢明に名前を付けると、単に()を使用して追加--argできます。$ARGS.named. += $ARGS.named

最初のケースでは、変数を使用すると、キーは評価する式として扱われます。つまり、キーを括弧で囲む必要があります(エラーメッセージはこの事実を直接暗示します)。

. += { ($key): $value }

たとえば、

jq -n --arg key 'no leading zero' --arg value '.13452' '{ ($key): $value }'

(追加するオブジェクトがないため. +=必要ありません。)


2番目のケースでは、次の.[$key]構文を使用する必要があります。

.[$key] = $value

たとえば、

jq -n --arg key 'no leading zero' --arg value '.13452' '.[$key] = $value'

3番目のケースでは、以下を使用してください。

. += $ARGS.named

たとえば、

jq -n --arg 'no leading zero' '.13452' '$ARGS.named'

(追加するオブジェクトがないため. +=必要ありません。)


を使用することもできますjo。この場合、構文がより単純になるか、少なくともコマンドが短くなります。

jo -- -s 'no leading zero'=.13452

(これを行うと、-s数値が文字列として解釈されます。)

関連情報