json - Jq tsv - 从键创建标题
问题描述
我试图让 jq 将 json 对象呈现为 tsv 格式。我遇到了一种使用键名动态生成标题的方法。
我收到此错误:
对象 ({"version":...) 在 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
标题下的一行破折号
在您在Jq tsv error in formatting an array/object的相关问题中,您需要在标题下添加一行破折号。
要自动生成这样一行,请参阅 如何使用 jq 将 JSON 字符串格式化为表格?
推荐阅读
- python - 如何在python中使用Click在函数内部传递函数?
- java - 使用 JNA SetForeGroundWindow
- python - 如何通过分块或流优化大型(不是巨大的)Pandas 迭代过程?
- ios - NSFetchedResultsController 在特定场景下不更新
- c# - Web API C#中没有数据只显示括号
- excel - 使用 VBA 将数据透视表与切片器连接
- c++ - 多个 DLL 之间的 C++ 共享接口
- sql - 如何在 Oracle 中比较选定的查询结果?
- wordpress - 4 页中的 2 个 WordPress 站点,请求是从 HTTP 发送的。如何将它从 HTTP 更改为 HTTPS?
- c# - C#中使用Webclient获取页面资源