【问题标题】:JQ query output in csv formatcsv格式的JQ查询输出
【发布时间】:2020-03-05 13:22:42
【问题描述】:

我一直在尝试使用 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

预期的 o/p 是:

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

【问题讨论】:

    标签: json export-to-csv jq


    【解决方案1】:

    您的预期输出留下了一些不清楚的地方:

    第二个 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
    

    我不能保证(并且有些怀疑)这适用于一般情况,但我无法从您的一个示例中提取一般情况。

    【讨论】:

    • 谢谢西蒙。您的询问正是我所需要的。我他们什么都没有,什么都不应该打印。基本上我试图获取 resourceId,config|name,summary|guest|ipAddress,summary|parentCluster,summary|parentDatacenter,summary|parentVcenter,summary|runtime|powerState
    • 我说得太早了。基本上,我想按顺序获取上述键的值。但是,在某些情况下,输入 json 中可能不存在键和值对,在这种情况下,我只想返回一个空字符串。这可能吗?
    猜你喜欢
    • 2019-01-15
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    相关资源
    最近更新 更多