jq - jq过滤器后输出到CSV时的额外空间

时间:2016-12-27 12:28:57

标签: jq

面对一个简单要求的问题。

  1. 发出CURL请求并存储在变量中
  2. 使用JQ从变量解析JSON并输出到CSV文件。
  3. 当我尝试这样做时,由于某种原因,我在第二行的文件中获得额外的前导空格。有没有办法配置jq不这样做?

    代码:

    output=`curl -v -k -H 'Content-Type: application/json' '<<URL>>' -d '<<PARAMS>>'`
    csvOutput=`echo $output | jq --raw-output '.result .items[]|[.name,.key,.created,.updated]|@csv'`
    echo $csvOutput >> out.csv
    

    以下代码(全部在一行中)没有问题。但是我需要变量中的curl输出来执行一些检查,所以这个选项没有帮助。

    echo "$(curl -v -k -H 'Content-Type: application/json' '<<URL>>' -d '<<PARAMS>>" | jq -r '.result .items[]|[.name,.key,.created,.updated]|@csv' >> out.csv
    

    奇怪的是,当我从文件中读取json输出(从curl响应中获取)然后应用jq过滤器时,我没有看到问题。

    cat response.json | jq -r '.result .items[]|[.name,.key,.created,.updated]|@csv' > out.csv
    

    response.json(格式化)

    {
      "result": {
        "total_items": 22,
        "total_pages": 1,
        "items_per_page": 1000,
        "current_page": 1,
        "items": [
          {
            "key": "1",
            "name": "Name 1",
            "created": "2016-12-20T08:51:13Z",
            "updated": "2016-12-20T09:29:08Z"
          },
          {
            "key": "2",
            "name": "Name 2",
            "created": "2016-12-20T08:51:13Z",
            "updated": "2016-12-20T09:29:08Z"
          },
          {
            "key": "3",
            "name": "Name 3",
            "created": "2016-12-20T08:51:13Z",
            "updated": "2016-12-20T09:29:08Z"
          }
        ]
      },
      "id": 1
    }
    

1 个答案:

答案 0 :(得分:2)

当您将结果写入csv文件时,您使用echo $csvOutput >> out.csv代替:

echo "$csvOutput" >> out.csv 

双引号将保留换行符,请参阅this post