私はJSONですjq
。
次のJSONドキュメントがあります。
{
"initial": [
{
"HIGH": null,
"LOW": "XXX",
"LARGE": "yyy",
"variant": "MAIN"
},
{
"HIGH": "ACE",
"LOW": "XXX",
"LARGE": "yyy",
"variant": "Loren"
}
]
}
私のコード:
jq -r '.initial[] | {Rank: .HIGH, Name: .variant} | join(",")'
出力:
,MAIN
ACE,Loren
予想出力:
yyy,MAIN
ACE, Loren
そうであれHIGH
ばにnull
戻りLARGE
、そうでnull
あればに戻りますLOW
。
もしそうなら、variant
デフォルト値null
を使用してくださいMAIN
。
誰でも私を助けることができますか?
私が試したいくつかのチュートリアルでは:
jq -r '.initial[] | {Rank: (map(if (.HIGH == null or .HIGH == "null" or .HIGH == "") then .LARGE else .HIGH end)), Name: .variant}'
しかし、これによりエラーが発生しました。
jq: error (at <stdin>:16): Cannot index string with string "HIGH"
答え1
欲しい//
jq '.initial[] | [.HIGH // .LARGE // .LOW, .variant // "MAIN"] | join(",")'
答え2
出力したいものがヘッダー付きのCSVレコードセットの場合は、ヘッダーを最初に渡してから演算子を介してデータを渡すことで取得できます@csv
。
$ jq -r '[ "Rank", "Name" ], (.initial | map([.HIGH // .LARGE // .LOW, .variant // "MAIN"]))[] | @csv' file
"Rank","Name"
"yyy","MAIN"
"ACE","Loren"
これは、Glennがデータを抽出するために使用するのと同様の表現を使用します。彼らの答えに、しかし使用しなさい map()
(なぜなら私はそれを好みmap()
、あなたはそれをあなたの試みに使用したいと思うので)。