【问题标题】:Jq tsv - create headers from keysJq tsv - 从键创建标题
【发布时间】:2021-06-10 05:14:20
【问题描述】:

我正在尝试让 jq 将 json 对象呈现为 tsv 格式。我遇到了一种使用键名动态生成标题的方法。

我收到此错误:

对象 ({"version":...) 在 csv 行中无效

我猜这是因为某些字段是数组:InstalledLatest。我怎样才能使这些领域的工作?另外,为什么我的输出包含\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
  }
]

【问题讨论】:

    标签: json bash jq


    【解决方案1】:

    第一件事就是让你的鸭子排成一排:

    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 的相关问题中,您需要在标题下添加一行破折号。

    要自动化生产此类生产线,请参阅 How to format a JSON string as a table using jq?

    【讨论】:

    • 这就是我需要的!为什么我的显示器会这样显示:"RELEASE\tINSTALLED\tLATEST\tDEPRECATED" "test-app\t1.0.0\t2.0.0\tfalse" "test-app2\t3.0.0\t3.5.0\tfalse"
    • 这就回答了!我还添加了column -t,所以它适合列
    • 没关系,但它不再是 TSV :-)
    猜你喜欢
    • 2021-02-12
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 2016-10-22
    相关资源
    最近更新 更多