jqでjsonオブジェクトをtsv形式にレンダリングしようとしています。キー名を使用して動的にヘッダーを生成する方法に出くわしました。
このエラーが発生します:
オブジェクト({"バージョン":...)はcsv行では無効です
これは、いくつかのフィールドが配列であるためだと思います:Installed
とLatest
。これらのフィールドでこれを機能させるにはどうすればよいですか?また、なぜ私の出力に含まれているの\t
ですか?
電流出力:
"RELEASE\tINSTALLED\tLATEST\tOUTDATED\tDEPRECATED"
jq: error (at <stdin>:28): object ({"version":...) is not valid in a csv row
必要な出力:
RELEASE INSTALLED LATEST OUTDATED DEPRACATED
test-app 1.0.0 2.0.0 true false
test-app2 3.0.0 3.5.0 true false
jq
cat test1.json | jq '[.[]| with_entries( .key |= ascii_upcase ) ] | (.[0] |keys_unsorted | @tsv), (.[]|.|map(.) |@tsv)'
json:
[
{
"release": "test-app",
"Installed": {
"version": "1.0.0",
"appVersion": ""
},
"Latest": {
"version": "2.0.0",
"appVersion": ""
},
"outdated": true,
"deprecated": false
},
{
"release": "test-app2",
"Installed": {
"version": "3.0.0",
"appVersion": ""
},
"Latest": {
"version": "3.5.0",
"appVersion": ""
},
"outdated": true,
"deprecated": false
}
]
最初に行うことは、アヒルを一列に並べることです。
map({release, installed: .Installed.version, latest: .Latest.version, deprecated})
これで、ヘッダーは簡単になりました。
( .[0] | keys_unsorted | map(ascii_upcase))
...そして。[]を使用して値をフェッチするのは安全です:
.[] | [.[]]
すべてを一緒に入れて:
map({release, installed: .Installed.version, latest: .Latest.version, deprecated})
| ( .[0] | keys_unsorted | map(ascii_upcase)),
(.[] | [.[]])
| @tsv
配列/オブジェクトのフォーマットにおけるJqtsvエラーでの関連する質問では、ヘッダーの下にダッシュの行が必要でした。
このような行の生成を自動化するには、jqを使用してJSON文字列をテーブルとしてフォーマットする方法を参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加