jq - 在 jq 过滤器后输出到 CSV 时额外 space

jq - Extra space when outputting to CSV after jq filter

遇到一个简单需求的问题。

  1. 发出 CURL 请求并存储在变量中
  2. 使用 JQ 从变量中解析 JSON 并输出到 CSV 文件。

当我尝试这样做时,出于某种原因,我在文件的第二行中获得了额外的前导 space。有没有办法配置 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
}

当您将结果写入 csv 文件时,您使用的是 echo $csvOutput >> out.csv 而不是 :

echo "$csvOutput" >> out.csv 

双引号会保留换行符,参见this post