csv格式的JQ查询输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csv格式的JQ查询输出相关的知识,希望对你有一定的参考价值。

我一直在尝试使用jq从下面的json文件中提取一个csv,但到目前为止还无法完成。请问这里有专家可以提供帮助吗?

{
  "values": [
    {
      "resourceId": "xxxx-xxxx-xxx-8b16-xxxxxx",
      "property-contents": {
        "property-content": [
          { 
            "statKey": "config|name",
            "timestamps": [
              1517591034069
            ],
            "values": [
              "somebname.UNIVERSE.test.com"
            ]
          },
          { 
            "statKey": "summary|guest|ipAddress",
            "timestamps": [
              1517591034069
            ],
            "values": [
              "100.xx.5.xx"
            ]
          },
          { 
            "statKey": "summary|parentCluster",
            "timestamps": [
              1551120506024
            ],
            "values": [
              "UFO-UFO"
            ]
          },
          { 
            "statKey": "summary|parentDatacenter",
            "timestamps": [
              1551120806021
            ],
            "values": [
              "GALAXY-D123"
            ]
          },
                    { 
            "statKey": "summary|parentVcenter",
            "timestamps": [
              1517591334271
            ],
            "values": [
              "X-RAY123"
            ]
          },
          { 
            "statKey": "summary|runtime|powerState",
            "timestamps": [
              1517591034069
            ],
            "values": [
              "Powered On"
            ]
          }
        ]
      }
    },
    ..
    ...
xxx-xxxx-xxx-8b16-xxxxxx,somebname.UNIVERSE.test.com,100.xx.5.xx,UFO-UFO,GALAXY-D123,X-RAY123,Powered On

预期输出/输出是:

xxx-xxxx-xxx-8b16-xxxxxx,somebname.UNIVERSE.test.com,100.xx.5.xx,UFO-UFO,GALAXY-D123,X-RAY123,Powered On
答案

您的预期输出使某些事情不清楚:

第二个CSV列包含somebname.UNIVERSE.test.com,它大概是从"property-content": [ { ..., "values": [ "somebname.UNIVERSE.test.com" ], ... }部分派生的。您如何确定要从"property-content"列表中的第二列中选择哪个元素?是因为这是第一个要素吗?是因为它的"statKey": "config|name"吗?

如果"property-content"列表为空怎么办?如果没有您要查找的"statKey"条目怎么办?如果"values"列表中有零个或多个元素怎么办? CSV行只能包含一个标量值。同样的问题适用于后续的列。

在这里疯狂猜测,

$ jq -r '.values[] | [ .resourceId, (."property-contents"."property-content"[] | .values[]) ] | join(",")' your.json
xxxx-xxxx-xxx-8b16-xxxxxx,somebname.UNIVERSE.test.com,100.xx.5.xx,UFO-UFO,GALAXY-D123,X-RAY123,Powered On

我不能保证(并有些怀疑)这在一般情况下是可行的,但是我无法从您的一个示例中提取一般情况。

以上是关于csv格式的JQ查询输出的主要内容,如果未能解决你的问题,请参考以下文章

为啥 jq --raw-output 参数无法从 @csv 输出中删除引号?

如何以 CSV 格式输出 MySQL 查询结果?

如何以 CSV 格式输出 MySQL 查询结果?

如何以 CSV 格式输出 MySQL 查询结果?

如何以 CSV 格式输出 MySQL 查询结果?

使用 Shell 脚本运行 SQL 查询并返回 CSV 格式的输出