【问题标题】:kubernetes popeye report JSON to cvs with JQkubernetes popeye 使用 JQ 将 JSON 报告到 csv
【发布时间】:2022-01-17 14:37:48
【问题描述】:

我需要在电子表格中重新格式化 Popeye Kubernetes 报告。 我用过jq,但有点棘手。

{
  "popeye": {
    "score": 90,
    "grade": "A",
    "sanitizers": [
      {
        "sanitizer": "cluster",
        "tally": {
          "ok": 1,
          "info": 0,
          "warning": 0,
          "error": 0,
          "score": 100
        },
        "issues": {
          "Version": [
            {
              "group": "__root__",
              "level": 0,
              "message": "[POP-406] K8s version OK"
            }
          ]
        }
      }
    ]
  }
}

导出到 csv 的最佳格式如下:

{
  "sanitizer" : "cluster",
  "kube-object" : "Version",
  "group": "__root__",
  "level": 0,
  "message": "[POP-406] K8s version OK"
}

我尝试了很多 jq 命令都没有成功。

有什么想法吗?

谢谢。

【问题讨论】:

    标签: csv kubernetes jq export-to-csv


    【解决方案1】:

    您要求进行 CSV 导出,但您以所需的格式显示对象。因此,我将对象的字段解释为 CSV 列:

    ["sanitizer", "kube-object", "group", "level", "message"],
    (.popeye.sanitizers[] | [.sanitizer] + (
      .issues | to_entries[] | [.key, (.value[] | .group, .level, .message)])
    )
    | @csv
    
    "sanitizer","kube-object","group","level","message"
    "cluster","Version","__root__",0,"[POP-406] K8s version OK"
    

    Demo

    使用jq--raw-output-r 参数来获得正确的CSV 格式。另外,如果您不需要标题,请删除第一行。

    【讨论】:

      【解决方案2】:

      一种选择是使用map()+ 运算符,以便按照问题中提供的格式生成JSON,例如

      jq - r '.[].sanitizers | map({sanitizer}+{"kube-object" : "Version"}+.issues.Version[])[]'
      

      在哪里

      {"kube-object" : "Version"}
      

      已添加为源 JSON 的不存在键值对

      Demo

      如果您的目标是逐行生成逗号分隔的键值对,请考虑使用

      jq -r '.[].sanitizers | map({sanitizer}+{"kube-object" : "Version"}+.issues.Version[])[] | to_entries[] | "\(.key), \(.value)"'
      

      Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-20
        • 2015-06-22
        • 2020-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多