2016-12-27 47 views
-1

面对一个简单需求的问题。jq - jq过滤器输出为CSV时的额外空间

  1. 请使用JQ和输出转换成CSV文件中的变量
  2. 解析从可变JSON一个CURL请求和存储。

当我尝试这样做时,出于某种原因,我从第二行获取文件的额外前导空间。有没有办法配置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输出(从卷曲响应取),然后申请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 
} 

回答

2

当你写你的结果到CSV文件您使用echo $csvOutput >> out.csv代替:

echo "$csvOutput" >> out.csv 

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