数値キーを使用してJQを使用してJSONを解析します。

数値キーを使用してJQを使用してJSONを解析します。

2000正しい値を返すjqコマンドの値を渡すカールが以下にあります。

curl -X GET \
  -H 'vmware-api-session-id: <auth-id>' \
  -k -s
  'https://<url>/api/vcenter/vm/vm-22' | python -m json.tool | jq -r '.disks."2000" | .label, .capacity' | paste - -

Hard disk 1 52143587328

2000これで変数のこの部分ができました。いいねi=2000 jq いいね

jq -r '.disks."$i" 

返品

null null

2000変数を通して渡す方法がわかりません。

ベストアンサー1

jq -r --arg i "$i" '.disks[$i] | [ .label, .capacity ] | @tsv'

これにより、次のようにシェル変数が式に渡さiれます。jqjq変える $i(これは文字列です)。鍵として使用できます[$i]

paste@tsvまた、必要な2つの値を含む配列を使用することで、使用する必要もなくなりますjq。これにより、コマンドと同様に、タブ区切りの出力が生成されますpaste

データを渡す必要もありませんpython -m json.tool(利点が何であるかわかりません)。きれいな印刷用に使用する場合にはjq


見ているVMware API ドキュメント、特定のディスクに関する情報を取得する要求は次のとおりです。

https://{api_host}/api/vcenter/vm/{vm}/hardware/disk/{disk}

vm-22これは、および/または代わりにVMの名前であり、ディスク識別子を使用する必要があると思います。{vm}2000"$i"{disk}vm-222000

これはあなたに次のことを与えるでしょう

{
    "backing": {
        "type": "enum",
        "vmdk_file": "string"
    },
    "capacity": 0,
    "ide": {
        "master": false,
        "primary": false
    },
    "label": "string",
    "sata": {
        "bus": 0,
        "unit": 0
    },
    "scsi": {
        "bus": 0,
        "unit": 0
    },
    "type": "enum"
}

答えとして。

以下を使用して、ラベルと容量をタブ区切りリストに解析できます。

jq -r '[ .label, .capacity ] | @tsv'

おすすめ記事